我有两个完全不同的AsyncTask
实现,比方说AT1
和AT2
。
AT1
,然后执行AT2
。 AT1
doInBackground
等待AT2
,直到AT1
完成任务,每隔500毫秒轮询一次此数据。但这从未发生过。
所以我基本上想要的是:
但似乎发生了这样的事情:
除AT2
之外永远不会,AsyncTask
永远不会开始。
有没有办法可以强制这两个AT2
在两个单独的线程上执行,还是有另一个解决方案呢?
无法先启动AT1
,然后执行AT1
。
修改
为了澄清:AT2
在用户打开特定屏幕时执行,并且需要根据位置下载该屏幕的数据。 AT2
在位置更改时执行,当发生这种情况时,会进行一些无法在UI线程上完成的计算。
从未执行AT1
时,AT2
没有可下载数据的位置,因此需要等待AT2
完成。当AT1
已执行时,位置数据已经存在,{{1}}无需等待。
此外,这个问题发生在ICS中,而不是在Android 2.3中,如this answer所示。
答案 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的内容。