我读了一篇关于asynctask here 的帖子,表示在与主线程使用此类的executeOnExecutor方法的parellel中执行它。我认为asynctask已经在parellel跑。 有人可以为我解释这个吗?asynctask没有与主线程运行parellel
回答
感谢@Rookie和@Nashe
从我的理解,可以的AsyncTask串行和并行运行。当AsyncTask以串行方式运行时,每个任务都在一个接一个地执行。假设您使用AsyncTask解码来自文件的图像,并且想要为您的列表视图解码多个图像。然后,您需要在适配器的getView()上执行多个AsyncTask,并且每个AsyncTask都是串行执行的。一个接一个地。
但是由于新设备有多个物理内核,这些设备可以同时执行多个线程。在这种情况下,您的每个AsyncTask可以相互并行运行。
但是你无法预测这些线程中的哪一个会先完成。即。你的第五行listview可能已经在第一行之前完成了解码图像。
所以AsyncTask.executeOnExecutor()(因为API 11),让你在并行和AsyncTask.execute()执行的AsyncTask让你执行的AsyncTask连续
我希望它可以帮助你..
根据到Morrison Chang共享的链接,它说api 11 asynctask连续运行后,默认情况下是在甜甜圈后进行的。因此,API 11之前的语句AsyncTask连续运行并不正确。但是,这让我对混乱有了很好的认识。 thnx – Rookie
谢谢你的更正。我会更新我的回答 –
首先,你应该了解我们将使用executeOnExecutor方法的位置, AsyncTask支持正确和简单地使用UI线程。该类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。
第一次引入时,AsyncTasks在单个后台线程上被串行执行。从DONUT开始,将其更改为允许多个任务并行操作的线程池。从HONEYCOMB开始,任务在单个线程上执行,以避免并行执行导致的常见应用程序错误。
如果您真的想要并行执行,可以使用THREAD_POOL_EXECUTOR调用executeOnExecutor(java.util.concurrent.Executor,Object [])。 例如,如果你要玩一首歌,当时同时下载一个文件,你必须使用的AsyncTask并行执行(ASYNCTASK.THREAD_POOL_EXECUTOR)
感谢您的回答。但是我有一个疑问,因为当我演奏一首歌曲时,我将使用seprate asynctask,在下载文件时我会使用另一个。这两个不会在单独的线程中运行吗? – Rookie
一个线程池可以运行一个任务的多个并行实例http://codetheory.in/android-java-executor-framework/ – skyshine
它肯定会做,但我的问题是当我在两个不同的asynctasks上执行两个不同的任务时,我需要在parellel中执行它们,否则它们本身将运行在parellel中。我的理解是,当我们使用相同的asynctask实现时,我们需要让它运行parellel,因为在跳转到另一个之前,相同的异步实现等待完成一个任务。但是,当我们使用不同的asynctasks时,不需要让它们运行不同,因为它们不同,它们肯定会在不同的asynctasks实例中运行。纠正我,如果我错了。@suresh – Rookie
- 1. AsyncTask onPostExecute没有在主线程上运行?
- 2. Parellel使用AsyncTask上传
- 3. AsyncTask Android主线程
- 4. 在主线上运行AsyncTask时出错
- 5. 为什么AsyncTask在应用程序的主线程中运行?
- 6. 从ASyncTask或线程运行服务?
- 7. Xml与AsyncTask解析比在主线程解析慢慢线程
- 8. PyGtk线程没有运行,直到主要退出
- 9. Nginx运行时没有主进程
- 10. AsyncTask没有执行
- 11. Heisenbug:线程不运行没有sysout
- 12. 运行方法没有调用线程
- 13. python 2.7线程没有正确运行
- 14. OpenMP运行线程,但继续主线
- 15. 试图与tkinter(tkinter是在主线程上)运行线程执行任务,而是它停止主线程
- 16. Android AsyncTask onPostExecute关闭主UI线程
- 17. ASyncTask修改主线程上的变量
- 18. AsyncTask完成后主线程崩溃
- 19. 后(Runnable r)与主线程的处理程序和在主线程中运行有什么区别
- 20. 与openMP没有并行线程
- 21. 与主线程
- 22. Android AsyncTask线程
- 23. ASyncTask Android使用主线程下载的对象线程
- 24. 更新UI主线程从子线程AsyncTask
- 25. Android多线程,主线程不能从Asynctask访问
- 26. 不能在线程中创建处理程序没有调用与AsyncTask Looper.prepare()
- 27. 在主线程上运行NSOperation
- 28. 运行时DLL停止主线程
- 29. 什么不在主线程上运行?
- 30. Task.StartNew保持主线程,同时运行
参见:http://stackoverflow.com/a/24788257/295004 –