4

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

AT1先执行,再AT2执行。AT1通过每 500 毫秒轮询一次该数据,等待doInBackground直到AT2完成其任务。但这永远不会发生。

所以我基本上想要的是这个: 在此处输入图像描述

但似乎发生的事情是: 在此处输入图像描述
除了AT1从未完成,AT2也从未开始。

有没有办法可以强制这两个AsyncTasks 在两个单独的线程上执行,或者有另一种解决方案吗?

不可能先启动AT2然后再执行AT1

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

whenAT2从未执行过,AT1没有位置可以下载数据,所以需要等待AT2完成。当AT2 已经执行时,位置数据已经存在,AT1无需等待。

此外,这个问题发生在 ICS 中,而不是在 Android 2.3 中,就像这个答案所暗示的那样。

4

3 回答 3

3

当我发布这个问题时,这个问题出现在该Related部分中。它建议使用executeOnExecutor,我已经实现了如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    new SetLocationAsyncTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, location);
} else {
    new SetLocationAsyncTask().execute(location);
}
于 2012-06-13T08:08:50.667 回答
0

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

于 2012-06-13T07:53:38.503 回答
0

听起来您可能需要重新考虑您的逻辑 - 如果您正在启动一个线程,然后需要等待另一个线程完成某些工作,为什么不让第一个线程完成这项工作呢?

如果您确实需要 2 个 AsyncTask,请让第一个收集所需的任何数据,并且在第一个完成之前不要启动第二个 - 在文档中阅读有关 onPostExecute 的信息。

于 2012-06-13T07:56:11.400 回答