2012-09-26 102 views
0

我想知道异步任务和线程之间的关系吗?每一个创建一个新的,是否缓存,汇集。异步任务线程源

+0

Answer [here](http://stackoverflow.com/questions/11705285/asynctasks-do-not-get-collected-causing-other-asynctasks-to-not-run/12232358#12232358)可以帮助你理解AsyncTask是如何实现的。 – yorkw

回答

3

默认情况下,Asynctask使用串行执行程序,因此单个线程用于在单个进程中执行所有的asynctasks。但你可以改变它。

检查doc

开始蜂窝,任务是回在单个 线程正在执行,以避免由并行执行 常见的应用错误。如果您确实需要并行执行,则可以使用 THREAD_POOL_EXECUTOR此方法的executeOnExecutor(Executor,Params ...)版本 ;

您还可以检查的AsyncTask here

0

源从Android文档本身,AsyncTasks让“无痛多线程”,所以AsyncTasks显然在后台使用线程。

我最近在Eclipse中使用DDMS插件描述了我的应用程序,该应用程序以常规(和非常接近)的间隔启动AsyncTasks。使用DDMS,您可以看到当前正在运行的线程数量及其名称。

从我在那里看到的,AsyncTasks使用线程池来管理AsyncTasks。在我的情况下,有5个线程命名为“AsyncTask#1”到“AsyncTask#5”,在一个循环中依次激活。

希望这回答你的问题的一部分!

+0

AsyncTask使用一个带有至少5个线程的[ThreadPoolExecutor](https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html)。默认的串行执行程序(> = Honeycomb)将按任务提交任务(等待任务完成,然后提交下一个任务)到选择线程来运行任务的池执行程序。可能是一个周期,但可能不一定是。 – zapl