我有两个异步任务。其中之一是每秒更新标题栏的一部分。在我启动其他异步任务(每秒更新其他屏幕元素)之后,第一个仍然运行,但无法更新屏幕。我在 onProgressUpdate() 上调用 UI 的东西。没有抛出异常。一切都可以单独工作。仅在同时发生时出现问题。我不懂为什么。我确实使用 API 8 (FROYO)。
谢谢你。
我有两个异步任务。其中之一是每秒更新标题栏的一部分。在我启动其他异步任务(每秒更新其他屏幕元素)之后,第一个仍然运行,但无法更新屏幕。我在 onProgressUpdate() 上调用 UI 的东西。没有抛出异常。一切都可以单独工作。仅在同时发生时出现问题。我不懂为什么。我确实使用 API 8 (FROYO)。
谢谢你。
首次引入时,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
编辑:检查下面的链接,有关于该主题的很好的解释。
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