如何保證Service不被殺死一直執行

2021-07-12 04:42:08 字數 1624 閱讀 8200

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...