-2

我有两个异步任务。其中之一是每秒更新标题栏的一部分。在我启动其他异步任务(每秒更新其他屏幕元素)之后,第一个仍然运行,但无法更新屏幕。我在 onProgressUpdate() 上调用 UI 的东西。没有抛出异常。一切都可以单独工作。仅在同时发生时出现问题。我不懂为什么。我确实使用 API 8 (FROYO)

谢谢你。

4

1 回答 1

1

首次引入时,AsyncTask 在单个后台线程上串行执行。从 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。可以处理多个香料请求。https://github.com/octo-online/robospice

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

同时运行多个 AsyncTask —— 不可能吗?

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

于 2013-04-05T15:24:49.510 回答