IntentService&FutureTask

目錄
1、IntentServic是什麼及作用
2、IntentService的架構
3、IntentService源碼分析
4、FutureTask是什麼
5、FutureTask源碼分析

1、IntentServic是什麼及作用

IntentService是一個特殊的service。
特殊兩點:
(1)在其運行過程中會自動開啓子線程中執行耗時任務;
(2)所有任務執行完成之後會自動停止。

2、IntentService的架構

IntentService底層需要HandlerThread和handler做支撐

3、IntentService源碼分析

HandlerThread是一個可以構造handler的thread,在其run方法中使用 Looper.prepare();向當前線程添加了一個looper,然後調用Looper.loop(); 開啓消息循環。

在IntentService的onCreate方法中構造了一個HandlerThread,並獲取這個HandlerThread中的looper,構造了一個ServiceHandler,在IntentService的onStart方法中通過在oncreate方法中構造的ServiceHandler將啓動IntentService的intent進行包裝之後發送到HandlerThread中進行處理,這樣處理的流程就切換到子線程中,在ServiceHandler的handleMessage中首先調用了onHandleIntent方法執行耗時任務,然後調用了stopSelf等待所有任務完成之後就關閉自己。

startId:A unique integer representing this specific request to start
表示此特定啓動請求的唯一整數

stopSelf(int startId):

 在其參數startId跟最後啓動該service時生成的ID相等時纔會執行停止服務。

stopSelf():直接停止服務。

使用場景:

 如果同時有多個服務啓動請求發送到onStartCommand(),不應該在處理完一個請求後調用stopSelf();因爲在調用此函數銷燬service之前,可能service又接收到新的啓動請求,如果此時service被銷燬,新的請求將得不到處理。此情況應該調用stopSelf(int startId)。請參見:IntentService

public void onDestroy() {
mServiceLooper.quit();
}
stopSelf service之後會回到其onDestroy方法,在onDestroy方法中調用mServiceLooper.quit去清除構造它的隊列中的所有消息,所有停止服務後,後續消息不能執行。

4、FutureTask是什麼

5、FutureTask源碼分析

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