首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步任务不使用主线程运行并行吗?

异步任务不使用主线程运行并行吗?
EN

Stack Overflow用户
提问于 2015-11-18 03:36:54
回答 2查看 342关注 0票数 2

我读了一篇关于异步任务这里的文章,其中说要在并行中执行它,与主线程一起使用该类的executeOnExecutor方法。我认为异步任务已经在并行中运行了。有人能给我解释一下吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-18 03:52:56

感谢新秀和纳什

据我所知,AsyncTask可以串行和并行地运行。当AsyncTask以串行方式运行时,每个任务都会依次执行。假设您使用AsyncTask从文件中解码图像,并且希望为您的listview解码多个图像。然后,您需要在适配器的AsyncTask ()上执行多个getView,并且这些AsyncTask中的每一个都是串行执行的。一个接一个。

但是,由于较新的设备有多个物理核,这些设备可以同时执行多个线程。在这种情况下,您的每个AsyncTask都可以并行运行。

但您无法预测这些线程中哪个线程将首先完成。即。您的第5行列表视图可能已经在第一行之前完成了图像解码。

因此,AsyncTask.executeOnExecutor()(因为API 11)允许并行执行AsyncTask,AsyncTask.execute()允许串行执行AsyncTask

希望它能帮到你..。

票数 0
EN

Stack Overflow用户

发布于 2015-11-18 04:08:19

首先,您应该了解我们将在哪里使用executeOnExecutor方法,AsyncTask支持正确和容易地使用UI线程。这个类允许在UI线程上执行后台操作和发布结果,而不必操作线程和/或处理程序。

当第一次引入时,AsyncTasks是在单个后台线程上串行执行的。从甜甜圈开始,这被更改为一个线程池,允许多个任务并行操作。从蜂窝开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误。

如果您确实希望并行执行,可以使用executeOnExecutor(java.util.concurrent.Executor,Object[])调用THREAD_POOL_EXECUTOR。例如,如果您想同时播放歌曲并下载文件,则必须使用异步任务并行执行(ASYNCTASK.THREAD_POOL_EXECUTOR)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33771401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档