保證service存活

2021-06-27 16:31:46 字數 1739 閱讀 7924

android開發的過程中,每次呼叫startservice(intent)的時候,都會呼叫該service物件的onstartcommand(intent,int,int)方法,然後在onstartcommand方法中做一些處理。

從android官方文件中,我們知道onstartcommand有4種int返回值,首先簡單地講講int返回值的作用。

一、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服務

注:解鎖,啟動,切換場景啟用廣播需加許可權,如啟動完成,及手機機狀態等。

變成核心程式,在360殺掉程序的時候,myreceiver照樣有效,保證service重生。呃

kill問題:

1. settings 中stop service

ondestroy方法中,呼叫startservice進行service的重啟。

2.settings中force stop 應用

捕捉系統進行廣播(action為android.intent.action.package_restarted)

3. 借助第三方應用kill掉running task

android:persistent="true"

android:label="@string/dialericonlabel"

android:icon="@drawable/ic_launcher_phone">

...

Android中保持Service的存活

這幾天一直在準備考試,總算有個半天時間可以休息下,寫寫部落格。如何讓service keep alive是乙個很常見的問題。但是android並沒 service有這樣功能,畢竟乙個系統面對的是使用者,必然以對使用者友好為先。這兩個方案有些地方需要說明和改進,然後還會有其他方案補充進來。方案一的做法...

android如何保證service不被殺死

android開發的過程中,每次呼叫startservice intent 的時候,都會呼叫該service物件的onstartcommand intent,int,int 方法,然後在onstartcommand方法中做一些處理。從android官方文件中,我們知道onstartcommand有4...

Android怎麼保證service不被殺死

官方文件告訴我們,android系統會盡量保持擁有service的程序執行,只要在該service已經被啟動 start 或者客戶端連線 bindservice 到它。當記憶體不足時,需要保持,擁有service的程序具有較高的優先順序。1 如果service正在呼叫oncreate,onstart...