1. 程式人生 > >關於Service的部分筆記

關於Service的部分筆記

stop top 運行時 引用 onrebind bind reat provide 周期


捆綁一個Service,你需要註意以下幾個點:
  1.你應該去捕捉DeadObjectException,這個異常通常會在連接斷開時拋出。
  2.對象是整個進程計數的引用。
  3.在進程的生命周期中,你應該配對使用綁定和解綁。比如:
  如果你只是在activity可見的情況下與Service進行交互,那麽你應該在onStart()函數裏進行綁定並在onStop()函數裏進行解綁。
  如果你是想在你的activity裏收到來自Service的回應[甚至在你的activity 被迫停止後進入後臺運行時],那麽你應該在onCreate()函數內進行綁定,並在onDestroy()函數內進行解綁。請註意,這意味著你的activity在整個生命周期裏都在使用這個Service,如果這個Service是在其他進程內運行,那麽你會加重這個進程的負載,並且這會導致系統Kill它以便回收資源。

  註意:不要在activity的onResume()和onPause()函數中對Service進行捆綁以及解綁操作,因為這些回調函數會在生命周期裏的任何過渡中出現,但你應該保持進程的過渡時間及其短暫。另外,如果一個應用中有多個activity綁定了同一個service並且在這些activity的兩個中存在過渡,那麽這個service可能會在activity被stop時被銷毀,並在下一個activity resume時重建。


綁定Service的生命周期的管理


  當一個Service不被任何用戶[指的是activity、service、content provider]綁定時,安卓系統會銷毀它[除非它是在onStartCommand()函數內被啟動].因此,你不必要親自去管理Service的生命周期。安卓系統會替你去管理它。
但是,如果你選擇了實現onStartCommand()的回調函數,那麽你就必須主動顯性地去給它解綁。不然它會隨時啟動。在這種情況下,這個Service會活動至它以stopSelf()方式自殺或者是其他組件調用stopService()函數,不管它是否被用戶所綁定。
  此外,如果你的Service已經啟動,並且接受綁定,那麽,當系統調用你的onUnbind()方法時,如果你即將回調onRebind()方法你,那麽需要選擇性地返回true。onRebind()方法返回一個void,但是用戶仍然可以在它回調onServiceConnected()接受IBinder對象。下表展示了Service的生命周期。

技術分享

關於Service的部分筆記