AsyncTask、HandlerThread、IntentService
AsyncTask原理
內部是
Handler
和兩個執行緒池實現的,Handler用於將執行緒切換到主執行緒,兩個執行緒池一個用於任務的派對,一個用於執行任務,當Asynctask
執行execute
方法時會封裝出一個FuterTask
物件,將這個物件加入佇列中,如果此時沒有正在執行的任務,就執行他,執行完成之後繼續執行佇列中的下一個任務,執行完成通過Handler將事件傳送到主執行緒。Asynctask
必須在主執行緒初始化,因為內部的Handler
是一個靜態物件,在Asynctask
類載入的時候他就已經被初始化了,在Android3.0
開始,execute
的方法是序列執行任務的,一個一個來,3.0之前是並行執行的,如果要在3.0上執行並行任務,可以呼叫executeOnExecutor
方法。
HandlerThread原理
繼承自
Thread
,start
開啟執行緒後,會在其run
方法中通過Looper
建立訊息佇列並開啟訊息迴圈,這個訊息佇列執行在子執行緒中,所以可以將HandlerThread
中的Looper
例項傳遞給一個Handler,從而保證這個Handler的handlerMessage
方法執行在子執行緒中,Android
中使用HandlerThread
的一個場景就是IntentService
IntentService原理
繼承自Service,它的內部封裝了
HandlerThread
和Handler
,可以執行耗時任務,同時因為他是一個服務,優先順序比普通執行緒高很多,所以更適合執行一些高優先順序的後臺任務。
HandlerThread
底層是通過Looper
訊息佇列實現的,所以他是順序的執行每一個任務,可以通過Intent的方式開啟IntentService
,IntentService
通過Handler將每一個Intent
加入HandlerThread
子執行緒中的訊息佇列,通過Looper
按順序一個個的取出並執行,執行完後結束自己,不需要開發者手動關閉。