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