2012-09-26 141 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