1. 程式人生 > >Android開發基礎——關於service的理解

Android開發基礎——關於service的理解

Android開發基礎——關於Service部分理解

Service的生命週期

Service有兩種啟動方式,對應的Service也有兩種生命週期:

  1. startService
    第一次呼叫startService:回撥順序是onCreate -> onStartCommand
    重複呼叫startService:不會回撥onCreate,但是會回撥onStartCommand
    最後還要呼叫stopService: 會回撥onDestroy
    startService不依賴啟動的元件,即使啟動元件銷燬也不會影響該Service在後臺執行。
  2. bindService
    第一次呼叫bindService
    : 回撥onCreate -> onBind
    重複呼叫bindService: 不會回撥onCreateonBind
    最後還要呼叫unbindServiceonUnbind -> 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後一定能重啟。