我读了一篇关于异步任务这里的文章,其中说要在并行中执行它,与主线程一起使用该类的executeOnExecutor方法。我认为异步任务已经在并行中运行了。有人能给我解释一下吗?
发布于 2015-11-18 03:52:56
感谢新秀和纳什
据我所知,AsyncTask可以串行和并行地运行。当AsyncTask以串行方式运行时,每个任务都会依次执行。假设您使用AsyncTask从文件中解码图像,并且希望为您的listview解码多个图像。然后,您需要在适配器的AsyncTask ()上执行多个getView,并且这些AsyncTask中的每一个都是串行执行的。一个接一个。
但是,由于较新的设备有多个物理核,这些设备可以同时执行多个线程。在这种情况下,您的每个AsyncTask都可以并行运行。
但您无法预测这些线程中哪个线程将首先完成。即。您的第5行列表视图可能已经在第一行之前完成了图像解码。
因此,AsyncTask.executeOnExecutor()(因为API 11)允许并行执行AsyncTask,AsyncTask.execute()允许串行执行AsyncTask
希望它能帮到你..。
发布于 2015-11-18 04:08:19
首先,您应该了解我们将在哪里使用executeOnExecutor方法,AsyncTask支持正确和容易地使用UI线程。这个类允许在UI线程上执行后台操作和发布结果,而不必操作线程和/或处理程序。
当第一次引入时,AsyncTasks是在单个后台线程上串行执行的。从甜甜圈开始,这被更改为一个线程池,允许多个任务并行操作。从蜂窝开始,任务在单个线程上执行,以避免由并行执行引起的常见应用程序错误。
如果您确实希望并行执行,可以使用executeOnExecutor(java.util.concurrent.Executor,Object[])调用THREAD_POOL_EXECUTOR。例如,如果您想同时播放歌曲并下载文件,则必须使用异步任务并行执行(ASYNCTASK.THREAD_POOL_EXECUTOR)。
https://stackoverflow.com/questions/33771401
复制相似问题