AsyncTask主要有兩個部分:一個是與主線程的交互,異步獲取數據,通知主線程更新ui。另外一個是負責線程的管理調度。
1.線程任務的調度,、:在項目內部會創建一個進程作用域的線程池來管理要運行的任務,當你調用asynctask。execute後,asynctask會把任務交給線程池。由線程池來管理創建Thread和運行Thread。
2、在android 2.3以前,內部線程池限制是5個,如果同一進程中,最多同時運行的AsyncTask只有5個,並且這種限制,在2.3版本以前是無法解決的。如果項目中需要大量使用後臺線程去執行任務,那麼只能自己去創建thread。
3、到了3.0以後,execute提交任務,按先後順序,每次只運行一個,也就按先後順序,每次只啓動一個線程執行一個任務,完成之後才執行第二個任務。但是可以通過executeOnExecutor方法。來自定義線程池數量的大小。
關於線程使用的幾點建議:
1、如果你的應用沒有與主線程交互,那麼直接使用thread就好了。
2、對於一般性的數據庫查詢,少量的io操作都沒有必要開啓線程
3、由於創建線程的開銷是非常大的,所以當有大量線程執行任務時,一定要創建線程池,無論是還設有Asynctask還是thread
4、對於想要立即開始執行的異步任務,要麼直接使用thread,要麼單獨創建線程池提供給AsyncTask,默認的AsyncTask不一定會立即執行你的任務。