android Service 問題

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后一定能重啟。??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容