AsyncTask的使用注意事項

AsyncTask的使用注意事項
前面的文章曾建議使用AsyncTask而不是使用Thread,可是AsyncTask彷佛又有它的限制,這就要根據具體的需求狀況而選擇合適的工具,No Silver Bullet。下面是一些建議:
•改善你的設計,少用異步處理
線程的開銷是很是大的,同時異步處理也容易出錯,難調試,難維護,因此改善你的設計,儘量的少用異步。對於通常性的數據庫查詢,少許的I/O操做是沒有必要啓動線程的。
•與主線程有交互時用AsyncTask,不然就用Thread
AsyncTask被設計出來的目的就是爲了知足Android的特殊需求:非主線程不能操做(UI)組件,因此AsyncTask擴展Thread加強了與主線程的交互的能力。若是你的應用沒有與主線程交互,那麼就直接使用Thread就行了。
•當有須要大量線程執行任務時,必定要建立線程池
線程的開銷是很是大的,特別是建立一個新線程,不然就沒必要設計線程池之類的工具了。當須要大量線程執行任務時,必定要建立線程池,不管是使用AsyncTask仍是Thread,由於使用AsyncTask它內部的線程池有數量限制,可能沒法知足需求;使用Thread更是要線程池來管理,避免虛擬機建立大量的線程。好比從網絡上批量下載圖片,你不想一個一個的下,或者5個5個的下載,那麼就建立一個CorePoolSize爲10或者20的線程池,每次10個或者20個這樣的下載,即知足了速度,又不至於耗費無用的性能開銷去無限制的建立線程。
•對於想要當即開始執行的異步任務,要麼直接使用Thread,要麼單首創建線程池提供給AsyncTask
默認的AsyncTask不必定會當即執行你的任務,除非你提供給他一個單獨的線程池。若是不與主線程交互,直接建立一個Thread就能夠了,雖然建立線程開銷比較大,但若是這不是批量操做就沒有問題。
•Android的開發沒有想像中那樣簡單,要多花心思和時間在代碼上和測試上面,以確信程序是優質的
數據庫

相關文章
相關標籤/搜索