Android 何时对并行或并发运行的AsyncTask调用onPreExecute?

Android 何时对并行或并发运行的AsyncTask调用onPreExecute?,android,android-asynctask,Android,Android Asynctask,我使用的是Android蜂巢。我需要并行执行一些任务,我使用的是AsyncTask的 公共最终异步任务executeOnExecutor(Executor exec,Params…Params)方法。在每个单独的线程中,我计算一些值,然后需要存储在ArrayList中。然后,我必须对ArrayList中的所有值进行排序,然后在UI中显示。现在我的问题是,如果其中一个线程比另一个线程提前完成,它会立即调用onPostExecute方法吗onPostExecute方法将在所有后台线程完成后调用?我的

我使用的是Android蜂巢。我需要并行执行一些任务,我使用的是AsyncTask的
公共最终异步任务executeOnExecutor(Executor exec,Params…Params)方法。在每个单独的线程中,我计算一些值,然后需要存储在ArrayList中。然后,我必须对ArrayList中的所有值进行排序,然后在UI中显示。现在我的问题是,如果其中一个线程比另一个线程提前完成,它会立即调用onPostExecute方法吗onPostExecute方法将在所有后台线程完成后调用?我的程序实现取决于此处发生的情况。

现在。。。。。就是这样

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

在非UI工作开始之前,
UI线程
上调用
onPreExecute()

然后
doInBackground()
执行旋转非UI线程,此时
onProgressUpdate(Progress…
保持同时执行。。。。但它的执行却极不可靠。

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

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


现在。。。。。就是这样

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

在非UI工作开始之前,
UI线程
上调用
onPreExecute()

然后
doInBackground()
执行旋转非UI线程,此时
onProgressUpdate(Progress…
保持同时执行。。。。但它的执行却极不可靠。

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

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


即使使用onexecuteExecutor可以并行执行,每个异步任务完成后都会调用postexecute

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


至于从多个线程管理一个arraylist,我认为您应该看看向量,因为它们是与fail fast行为同步的

即使使用onexecuteExecutor可以并行执行,每个异步任务完成后都会调用postexecute

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


至于从多个线程管理一个arraylist,我认为您应该看看向量,因为它们是与fail fast行为同步的

我明白了?但我的问题是onPostExecute()是否会等待所有并行线程完成?@Debarshi Dutta
onPostExecute()
只会等待
doInBackground()
AsynTask
,而不是针对任何其他AsyncTask或任何其他线程…那么,当我使用ExecutorOneExecutor方法时会发生什么?假设我使用两个Runnable?onpostExecute会运行两次吗?那么,在这里使用AsyncTask的主要目的是为程序员提供无痛的线程体验,如果你想使用Executor,请再次记住,对于非UI任务,它是一个非UI线程,然后您将需要一个处理程序将其与专用UI线程同步,这就扼杀了使用AsyncTask的全部目的……我明白了?但我的问题是,是否onPostExecute()等待所有并行线程完成?@Debarshi Dutta
onPostExecute()
将只等待
doInBackground()
AsynTask
,而不是针对任何其他AsyncTask或任何其他线程…那么,当我使用ExecutorOneExecutor方法时会发生什么?假设我使用两个Runnable?onpostExecute会运行两次吗?那么,在这里使用AsyncTask的主要目的是为程序员提供无痛的线程体验,如果你想使用Executor,然后再次记住,对于非UI任务,它是一个非UI线程,然后您将需要一个处理程序将其与专用UI线程同步,这就破坏了使用AsyncTask的全部目的。。。。