android開發的過程中,每次呼叫startservice(intent)的時候,都會呼叫該service物件的onstartcommand(intent,int,int)方法,然後在onstartcommand方法中做一些處理。
從android官方文件中,我們知道onstartcommand有4種int返回值,首先簡單地講講int返回值的作用。
1.修改onstartcommand(..)方法的返回值
onstartcommand有4種返回值:
start_sticky:如果service程序被kill掉,保留service的狀態為開始狀態,但不保留遞送的intent物件。隨後系統會嘗試重新建立service,由於服務狀態為開始狀態,所以建立服務後一定會呼叫onstartcommand(intent,int,int)方法。如果在此期間沒有任何啟動命令被傳遞到service,那麼引數intent將為null。
start_not_sticky:「非粘性的」。使用這個返回值時,如果在執行完onstartcommand後,服務被異常kill掉,系統不會自動重啟該服務。
start_redeliver_intent:重傳intent。使用這個返回值時,如果在執行完onstartcommand後,服務被異常kill掉,系統會自動重啟該服務,並將intent的值傳入。
start_sticky_compatibility:start_sticky的相容版本,但不保證服務被kill後一定能重啟。
二、建立不被殺死的service
1.在service中重寫下面的方法,這個方法有三個返回值, start_sticky(或start_sticky_compatibility)是service被kill掉後自動重寫建立
@override
public int onstartcommand(intent intent, int flags, int startid) 或
@override
public int onstartcommand(intent intent, int flags, int startid)
@override
public void onstart(intent intent, int startid)
2.在service的ondestroy()中重啟service.
public void ondestroy()
3.建立乙個廣播
public class myreceiver extends broadcastreceiver}
4.androidmanifest.xml中註冊廣播myreceiver及myservice服務
注:解鎖,啟動,切換場景啟用廣播需加許可權,如啟動完成,及手機機狀態等。
還有一種是將service設定為前台服務
【有興趣可以研究一下 守護程序 和 aidl 】
我猜想它應該是相互監聽,如果有一方被kill掉,另乙個捕獲到立即啟動,以達到service永遠都在執行的狀態,貌似360也是這個原理,具體是 不是這個樣子,還有待參考,目前我還沒有參透它們是如何實現的,
參考:變成核心程式,在360殺掉程序的時候,myreceiver照樣有效,保證service重生。呃
保證service不被殺死
1 service設定成start sticky kill 後會被重啟 等待5秒左右 重傳intent,保持與重啟前一樣 2 提公升service優先順序 在androidmanifest.xml檔案中對於intent filter可以通過android priority 1000 這個屬性設定最高...
如何保證Service不被殺死一直執行
android開發的過程中,每次呼叫startservice intent 的時候,都會呼叫該service物件的onstartcommand intent,int,int 方法,然後在onstartcommand方法中做一些處理。從android官方文件中,我們知道onstartcommand有4...
Android Service 服務不被殺死的妙招
這篇文章主要介紹了android service 服務不被殺死的妙招的相關資料,需要的朋友可以參考下 service是android 系統中的一種元件,它跟activity的級別差不多,但是他不能自己執行,只能後台執行,並且可以和其他元件進行互動。android開發的過程中,每次呼叫startser...