1. 程式人生 > >Service onStartCommand的引數和返回值的含義

Service onStartCommand的引數和返回值的含義

在startService啟動一個Service 時會執行onStartCommand(Intent intent, int flags, int startId)

引數:

intent:是startService時傳過來的 如:startService(new Intent(this,TestService.class));
flags:是系統傳入 有如下三種值:
返回0:1,通過startService啟動時為0;2,onStartCommand返回為START_STICKY_COMPATIBILITY或者START_STICKY並且服務異常殺死後由系統啟動;
返回START_FLAG_REDELIVERY=1:onStartCommand返回為START_REDELIVER_INTENT並且服務異常殺死後由系統啟動;
返回START_FLAG_RETRY=2:暫時還不知道;

startId:大概是onStartCommand的啟動次數,第一次通過startService啟動為是1,不斷startService啟動依次累加,一般配合stopSelf(startId)使用可以看IntentService中使用

返回值

START_STICKY:如果service程序被kill掉,保留service的狀態為開始狀態,但不保留遞送的intent物件。隨後系統會嘗試重新建立service,由 於服務狀態為開始狀態,所以建立服務後一定會呼叫onStartCommand(Intent,int,int)方法。如果在此期間沒有任何啟動命令被傳 遞到service,那麼引數Intent將為null。

START_NOT_STICKY:“非粘性的”。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統不會自動重啟該服務

START_REDELIVER_INTENT:重傳Intent。使用這個返回值時,如果在執行完onStartCommand後,服務被異常kill掉,系統會自動重啟該服務,並將Intent的值傳入。
START_STICKY_COMPATIBILITY:START_STICKY的相容版本,但不保證服務被kill後一定能重啟。
以上實在5.1上測試的