1

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

4

2 回答 2

3

现在......它是这样的......

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

onPreExecute()在非 UI 工作开始之前在UI thread上调用。

然后doInBackground() 执行旋转非 UI 线程,此时onProgressUpdate(Progress...)保持同时执行....但其执行高度不可预测。

doInBackground()之后onPostExecute() 在 UI 线程上运行。

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

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

于 2012-09-03T09:31:48.010 回答
1

即使使用 onexecuteExecutor 会给你并行执行,每个异步任务一旦完成就会调用 postexecute。

但是 asynctask 会自行返回,以便您在必要时知道哪个是哪个,并跟踪它们的返回顺序。

文档

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

于 2012-09-03T09:52:57.660 回答