我正在使用Android HoneyComb。我需要并行执行某些任务,而我正在使用AsyncTask的 公共最终AsyncTask executeOnExecutor(Executor exec,Params ... params)方法。在每个单独的线程中,我正在计算一些值,然后我需要存储在ArrayList中。然后我必须对所有值进行排序arrayList然后在UI中显示它。现在我的问题是,如果其中一个线程比另一个更早完成,那么它会立即调用 onPostExecute 方法或 onPostExecute 方法将在所有后台线程完成后调用?我的程序实现取决于此处发生的事情。
答案 0 :(得分:3)
现在.....这样......
AsyncTask
同步了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将返回自己,以便您可以知道哪些是必要的,并跟踪他们的退货顺序。
至于从多个线程管理arraylist,我认为你应该看看Vectors,因为它们与一个快速失败的行为同步。 http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Vector.html