两个不同的AsyncTasks同时执行

时间:2012-06-13 07:48:12

标签: android android-asynctask

我有两个完全不同的AsyncTask实现,比方说AT1AT2

首先执行

AT1,然后执行AT2AT1 doInBackground等待AT2,直到AT1完成任务,每隔500毫秒轮询一次此数据。但这从未发生过。

所以我基本上想要的是: enter image description here

但似乎发生了这样的事情: enter image description here
AT2之外永远不会,AsyncTask永远不会开始。

有没有办法可以强制这两个AT2在两个单独的线程上执行,还是有另一个解决方案呢?

无法先启动AT1,然后执行AT1

修改
为了澄清:AT2在用户打开特定屏幕时执行,并且需要根据位置下载该屏幕的数据。 AT2在位置更改时执行,当发生这种情况时,会进行一些无法在UI线程上完成的计算。

从未执行AT1时,AT2没有可下载数据的位置,因此需要等待AT2完成。当AT1 已执行时,位置数据已经存在,{{1}}无需等待。

此外,这个问题发生在ICS中,而不是在Android 2.3中,如this answer所示。

3 个答案:

答案 0 :(得分:3)

当我发布此问题时,Related部分中出现了this question。 它建议使用executeOnExecutor,我已按如下方式实现:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    new SetLocationAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, location);
} else {
    new SetLocationAsyncTask().execute(location);
}

答案 1 :(得分:0)

有两个异步任务有什么意义,如果一个人等待另一个?如果你想这样做,为什么不让第一个开始第二个并将“完成”的东西放在第二个任务中呢?

答案 2 :(得分:0)

听起来你可能需要重新考虑你的逻辑 - 如果你开始一个线程然后需要等待另一个线程做一些工作,为什么不让第一个线程做那个工作呢?

如果你真的需要2个AsyncTasks,请让第一个收集所需的任何数据,并且在第一个完成之后不要启动第二个 - 在文档中读取有关onPostExecute的内容。