两个AsyncTasks无法同时更新屏幕

时间:2013-04-05 15:20:18

标签: android multithreading android-asynctask

我有两个asynctasks。其中一个是每秒更新标题栏的一部分。在我启动其他asynctask(每秒更新其他屏幕元素)后,第一个仍然运行,但无法更新屏幕。我在onProgressUpdate()上调用UI东西。没有抛出异常。一切都很好。问题只有在ocur concurent。我不懂为什么。我确实使用API​​ 8 (FROYO)

谢谢。

1 个答案:

答案 0 :(得分:1)

首次引入时,AsyncTasks在单个后台线程上串行执行。从DONUT开始,这被改为一个线程池,允许多个任务并行运行。 从HONEYCOMB开始,任务在单个线程上执行,以避免因并行执行而导致的常见应用程序错误。

如果您真的想要并行执行,可以使用THREAD_POOL_EXECUTOR 调用executeOnExecutor(java.util.concurrent.Executor,Object [])。

有关详细信息,请查看以下链接。

http://developer.android.com/reference/android/os/AsyncTask.html

https://github.com/vitkhudenko/test_asynctask。 asynctask的一个样本,用于测试和播放

作为替代方案,您可以使用RoboSpice。可以处理多个spice请求。 https://github.com/octo-online/robospice

编辑:检查下面的链接有关该主题的一个很好的解释。

Running multiple AsyncTasks at the same time -- not possible?

void startMyTask(AsyncTask asyncTask) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
    asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
else
    asyncTask.execute(params);
 }

http://developer.android.com/reference/java/util/concurrent/Executor.html