Android AsyncTask 原理淺析

        AsyncTask  可以在後臺完成相應的操作,然後將結果傳遞給UI主線程進行顯示等,以減輕UI主線程的工作。

        AsyncTask  類內部封裝了task隊列,task處理過程。用戶通過實現相應的抽象函數,來完成相應的功能。下面是整個AsyncTask 的類圖結構:


從圖中可以看出一下幾個關鍵點:

1.AsyncTask  類內部封裝了task 對象(見圖中WorkerRunnable)。這個task回調doInBackground()函數,來完成用戶指定的後臺操作,然後將結果post給UI主線程;

2.AsyncTask  內部封裝了一個Handler,這個Handler和UI的主線程Looper綁定,以實現UI主線程的Looper回調Handler以進行對task結果的後續處理(比如進度更新和UI描畫);這也就是爲什麼創建AsyncTask 的地方必須是UI主線程內部;

3.AsyncTask 內部實現了Thread工廠,這個工廠提供給Executor使用,用來產生task的處理線程;

4.對於task的保存,AsyncTask默認採用LinkedBlockingQueue實現,大小限定爲10;


下面以最簡單的AsyncTask使用模式:創建AsyncTask,然後執行一個異步操作的流程來看一下UI thread和worker thread之間的簡單時序:




從圖中可以看出,AsyncTask 中的抽象方法doInBackground ()是在worker thread中執行;而onProgressUpdate和onPostExecute是在UI線程裏面實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章