Service介紹&生命週期詳解

Service介紹

Service 是 Android 四大組件之一,常用來運行在後臺進行耗時操作。其它的應用程序組件可以啓動一個Service,即使在用戶切換到另外一個應用程序後,這個Service還是一直會在後臺運行。此外,一個應用程序也可以綁定到一個Service然後使用進程間通信(IPC)方式與Service之間發生交互。例如一個Service可以處理網絡事物,播放音樂,讀寫文件或者讀寫ContentProvider,所以這些都在後臺運行。


Service 的生命週期

說起 Service 的生命週期,就必須提起它的兩種啓動方式:

  • Context.startService(intent);
    這種情況下的生命週期:
    onCreate()–>onStartCommand() 其實 onStartCommand 內部調用了 onstart,當我們首次使用startService啓動一個服務時,系統會實例化一個Service實例,依次調用其onCreate和onStartCommand方法,然後進入運行狀態,此後,如果再使用startService啓動服務時,不再創建新的服務對象,系統會自動找到剛纔創建的Service實例,調用其onStart方法;如果我們想要停掉一個服務,可使用stopService方法,此時onDestroy方法會被調用,需要注意的是,不管前面使用了多個次startService,只需一次stopService,即可停掉服務。

  • Context.bindService(intent);
    在這種模式下,當調用者首次使用bindService綁定一個服務時,系統會實例化一個Service實例,onCreate–>onStartCommand –>onStart–>onBind–>onServiceConnected. 如果此時再次綁定:onStartCommand –>onStart。解綁會調用:onUnbind。解綁之後再次綁定:onStartCommand –>onStart–>onServiceConnected:就是說 oncreate、onBind、onUnBind都只會調用一次,同時onBind必須返回一個實現了IBinder接口類型的實例。

  • 區別
    startService模式下調用者與服務無必然聯繫,即使調用者結束了自己的生命週期,只要沒有使用stopService方法停止這個服務,服務仍會運行;通常情況下,bindService模式下服務是與調用者生死與共的,在綁定結束之後,一旦調用者被銷燬,服務也就立即終止。

  • 如果沒有解綁就銷燬組件,會報出異常。
  • 解綁之後服務依然存在的。
  • 如果解綁之後重新綁定 會調用onServiceConnected,如果沒有解綁,一直重複綁定,只會調用onStartCommand –>onStart
  • 如果在沒有解綁的情況下stopService,不會調用後ondestroy
  • 如果Service已經停止,再解綁,會調用onUNBind–>onDestroy

圖解:

這裏寫圖片描述

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