什么时候在并行或同时运行的AsyncTask上调用onPreExecute?

时间:2012-09-03 09:20:44

标签: android android-asynctask

我正在使用Android HoneyComb。我需要并行执行某些任务,而我正在使用AsyncTask的 公共最终AsyncTask executeOnExecutor(Executor exec,Params ... params)方法。在每个单独的线程中,我正在计算一些值,然后我需要存储在ArrayList中。然后我必须对所有值进行排序arrayList然后在UI中显示它。现在我的问题是,如果其中一个线程比另一个更早完成,那么它会立即调用 onPostExecute 方法或 onPostExecute 方法将在所有后台线程完成后调用?我的程序实现取决于此处发生的事情。

2 个答案:

答案 0 :(得分:3)

现在.....这样......

AsyncTask同步了UI线程,非UI的输出工作在非UI线程上。

在非UI工作开始之前,onPreExecute()会调用

UI thread

然后doInBackground() 执行旋转非UI线程,此时onProgressUpdate(Progress...)保持同时执行....但它对执行的高度无法预测。

doInBackground(后),onPostExecute() 在UI主题上运行。

有关详细信息,请参阅此链接:

http://developer.android.com/reference/android/os/AsyncTask.html

答案 1 :(得分:1)

即使使用onexecuteExecutor会让你并行执行,每个asynctask都会在完成后立即调用postexecute。

但asynctask将返回自己,以便您可以知道哪些是必要的,并跟踪他们的退货顺序。

The doc

至于从多个线程管理arraylist,我认为你应该看看Vectors,因为它们与一个快速失败的行为同步。 http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Vector.html