1
開啟服務的兩種方式:
startService:開啟服務后與程序脫離(除非程序卸載或者調(diào)用stop),始終運行。
bindService:與相關(guān)程序生命周期綁定,例如activity,ondestory時結(jié)束運行。
另外?Android 8.0 引入了一種全新的方法startForegroundService來開啟服務,在系統(tǒng)創(chuàng)建服務后,應用有五秒的時間來調(diào)用該服務的startForeground()方法以顯示新服務的用戶可見通知。如果應用在此時間限制內(nèi)未調(diào)用startForeground(),則系統(tǒng)將停止服務并聲明此應用為ANR。
詳情請看:https://blog.csdn.net/shift_wwx/article/details/82496447
2
start方式啟動服務:
onCreate:?服務創(chuàng)建時調(diào)用
onStartCommand:?服務被調(diào)用開啟方法時調(diào)用
onDestroy:?服務銷毀時調(diào)用


bind方式啟動服務:
onCreate: 服務創(chuàng)建時調(diào)用
onBind: 服務被綁定時調(diào)用
onServiceConnected: 服務連接時調(diào)用。該API并不屬于Service,而是屬于ServiceConnection。而這個接口作為參數(shù)在綁定時傳遞給了Service
onUnbind: 服務被解綁時調(diào)用
onDestroy: 服務銷毀時調(diào)用


先start后bind
onCreate-onStartCommand-onBind-onServiceConnected-onUnbind-onDestroy


先bind后start
onCreate-onBind-onStartCommand-onServiceConnected-onUnbind-onDestroy


3?onStartCommand返回值
1):START_STICKY: 如果service進程被kill掉,保留service的狀態(tài)為開始狀態(tài),但不保留遞送的intent對象。隨后系統(tǒng)會嘗試重新創(chuàng)建service,由 于服務狀態(tài)為開始狀態(tài),所以創(chuàng)建服務后一定會調(diào)用onStartCommand(Intent,int,int)方法。如果在此期間沒有任何啟動命令被傳 遞到service,那么參數(shù)Intent將為null。??
2):START_NOT_STICKY:“非粘性的”。使用這個返回值時,如果在執(zhí)行完onStartCommand后,服務被異常kill掉,系統(tǒng)不會自動重啟該服務??
3):START_REDELIVER_INTENT:重傳Intent。使用這個返回值時,如果在執(zhí)行完onStartCommand后,服務被異常kill掉,系統(tǒng)會自動重啟該服務,并將Intent的值傳入。? ?
4):START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保證服務被kill后一定能重啟。??
