Android 中的執行緒有哪些,原理與各自特點

Merbng發表於2019-03-16

AsyncTask、HandlerThread、IntentService

AsyncTask原理

內部是Handler和兩個執行緒池實現的,Handler用於將執行緒切換到主執行緒,兩個執行緒池一個用於任務的派對,一個用於執行任務,當Asynctask執行execute方法時會封裝出一個FuterTask物件,將這個物件加入佇列中,如果此時沒有正在執行的任務,就執行他,執行完成之後繼續執行佇列中的下一個任務,執行完成通過Handler將事件傳送到主執行緒。Asynctask必須在主執行緒初始化,因為內部的Handler是一個靜態物件,在Asynctask類載入的時候他就已經被初始化了,在Android3.0開始,execute的方法是序列執行任務的,一個一個來,3.0之前是並行執行的,如果要在3.0上執行並行任務,可以呼叫executeOnExecutor方法。

HandlerThread原理

繼承自Threadstart開啟執行緒後,會在其run方法中通過Looper建立訊息佇列並開啟訊息迴圈,這個訊息佇列執行在子執行緒中,所以可以將HandlerThread中的Looper例項傳遞給一個Handler,從而保證這個Handler的handlerMessage方法執行在子執行緒中,Android中使用HandlerThread的一個場景就是IntentService

IntentService原理

繼承自Service,它的內部封裝了HandlerThreadHandler,可以執行耗時任務,同時因為他是一個服務,優先順序比普通執行緒高很多,所以更適合執行一些高優先順序的後臺任務。

HandlerThread底層是通過Looper訊息佇列實現的,所以他是順序的執行每一個任務,可以通過Intent的方式開啟IntentServiceIntentService通過Handler將每一個Intent加入HandlerThread子執行緒中的訊息佇列,通過Looper按順序一個個的取出並執行,執行完後結束自己,不需要開發者手動關閉。

相關文章