当前位置: 首页 > 面试题库 >

多个AsyncTask的onPostExecute顺序

苏晓博
2023-03-14
问题内容

首先,抱歉英语不好。我有android 2.3,所以有“真实”并行AsyncTask而不是顺序执行(android
3.0及更高版本)。我有几个AsyncTasks,它们每个都执行onPostExecute()回调(我知道它将在UI线程中执行)。假设我只有两个并行的AsyncTask,并且当第一个任务完成其工作时,将调用回调onPostExecute()。是否有可能在UI线程上运行onPostExecute()方法(来自第一个AsyncTask)时,第二个任务正在调用其onPostExecute()方法来中断第一个AsyncTask的onPostExecute()的当前执行?

//更新我现在用代码解释它:

// AsyncTask1
onPostExecute(Result result) {
    activity->processResult1(result);
}

// AsyncTask2
onPostExecute(Result result) {
    activity->processResult2(result);

假设AsyncTask1已完成其工作,并且processResult1()是运行时间很长的方法:当我们在UI线程上执行processResult1()时,AsyncTask2完成其工作。现在会发生什么?

  1. processResult1()将被processResult2()中断
  2. processResult2()等到processResult1()结束

问题答案:

AsyncTask完成它的doInBackground方法,它的职位Runnable(其中执行我们的onPostExecute方法)到UI线程。“发布”是指存在某种Runnable队列,这意味着这些方法(onPostExecute)将以串行方式(一个接一个)执行。因此,一种onPostExecute方法不能中断另一种方法(当然,如果它已经发布到UI线程中)。



 类似资料:
  • 问题内容: 我有一个Asynctask,它检索两个int值,并且我想将它们传递给onPostExecute以在视图上显示它们。 这是我的代码: 先感谢您。 问题答案: 您可以定义一个Wrapper类,其中包含两个整数: 并用它代替:

  • 问题内容: 由于某种原因,我完成后没有被调用。 我的班级干事: 我的onPostExecute(): 一切正常,我成功完成并返回一个布尔值,但随后就结束了。 谢谢 问题答案: 您是否在UI线程上创建了AsyncTask?还要在onPostExecute()方法上添加一个@Override注释,以确保正确声明了它。

  • 公共类HttpHelper扩展AsyncTask } 在这段代码中,我通过AsyncTask从服务器读取数据,结果应该出现在新的UI中。这意味着我想从onPostExecute()开始新的活动。

  • 目前,我在主activity类和widget类中都声明了一个AsyncTask。除了中的结果处理之外,其他代码都是一样的(在activity中,检索到的结果转到activity中的textview,而在小部件中,它转到my widget中的textview)。 我想将移动到一个外部java文件中(以避免代码重复),并通过不同的结果处理方式从其他不同的类(如我的小部件和main activity)调

  • 问题内容: 我通过将操作拆分为可用的确切内核数来并行化操作,然后通过启动相同数量的AsyncTask,对数据的不同部分执行相同的操作。 我正在使用以并行化它们的执行。 我想知道每个线程何时完成其工作,以便结合所有结果并执行进一步的操作。 我能怎么做? 问题答案: 您还可以简单地将共享库中的计数器递减作为的一部分。由于在同一线程(主线程)上运行,因此您不必担心同步。 更新1 共享对象可能看起来像这样

  • 问题内容: 我在运行时无法获取要调用的方法。当我尝试建立扩展覆盖的类时,出现以下构建错误。 “类型为AsyncTaskExampleActivity的onPostExecute()方法必须重写或实现超类型方法” 我尝试摆脱注释。这样可以消除构建错误,但是该方法仍然无法执行。如果有人愿意指出我忽略的内容,我将不胜感激。 码: 问题答案: 接受一个参数 (您从中返回的对象)。将其更改为。如果不提供参数