一.Service簡介
Service是android 系統中的四大組件之一(Activity、Service、BroadcastReceiver、ContentProvider),它跟Activity的級別差不多,但不能自己運行,需要通過某一個Activity或者其他Context對象來調用,並且可以和其他組件進行交互。Service的啓動有兩種方式:context.startService() 和 context.bindService()。
二.Service的啓動流程
1.通過context.startService()啓動,調用Context.stopService()結束,startService()可以傳遞參數給Service。
流程爲:context.startService()
-> onCreate() -> onStart() -> Service running -> context.stopService() -> onDestroy() -> Service stop
注意 以下問題:
a.如果Service還沒有運行,則android先調用onCreate(),然後調用onStart();
b.如果Service已經運行,則只調用onStart(),所以一個Service的onStart方法可能會重複調用多次。
c.如果stopService的時候會直接onDestroy,如果是調用者自己直接退出而沒有調用stopService的話,Service會一直在後臺運行,該Service 的調用者再啓動起來後可以通過stopService關閉Service。
d.所以調用startService的生命週期爲:onCreate --> onStart (可多次調用) --> onDestroy2.context.bindService()啓動流程:
context.bindService() -> onCreate() -> onBind() -> Service running -> onUnbind() -> onDestroy() -> Service stoponBind()將返回給客戶端一個IBind接口實例,IBind允許客戶端回調服務的方法,比如得到Service的實例、運行狀態或其他操作。這個時候把調用者(Context,例如Activity)會和Service綁定在一起,Context退出了,Srevice就會調用onUnbind->onDestroy相應退出。 所以調用bindService的生命週期爲:onCreate --> onBind(只一次,不可多次綁定) --> onUnbind --> onDestory。
在Service每一次的開啓關閉過程中,只有onStart可被多次調用(通過多次startService調用),其他onCreate,onBind,onUnbind,onDestory在一個生命週期中只能被調用一次。