Android開發基礎——關於service的理解
阿新 • • 發佈:2018-11-07
Android開發基礎——關於Service部分理解
Service的生命週期
Service有兩種啟動方式,對應的Service也有兩種生命週期:
- startService
第一次呼叫startService:回撥順序是onCreate -> onStartCommand
重複呼叫startService:不會回撥onCreate,但是會回撥onStartCommand
最後還要呼叫stopService: 會回撥onDestroy
startService不依賴啟動的元件,即使啟動元件銷燬也不會影響該Service在後臺執行。 - bindService
第一次呼叫bindService
重複呼叫bindService: 不會回撥onCreate 和 onBind
最後還要呼叫unbindService :onUnbind -> onDestroy
bindService依賴啟動的元件,啟動元件銷燬該Service也會銷燬。
如果同時使用呢:
反正onCreate只回調一次,時機是第一次呼叫startService或bindService,順序無所謂。onDestroy 也只回調一次。時機是分別呼叫unbindService和stopService後,已最後呼叫方法為回撥時機,順序依然無所謂。
onStartCommand的返回值
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後一定能重啟。