android 其實無法做多絕對的不被後台kill掉,我們只能盡量使用一些操作提公升不被kill的機會。
一、onstartcommand方法,返回start_sticky
start_sticky 在執行onstartcommand後service程序被kill後,那將保留在開始狀態,但是不保留那些傳入的intent。不久後service就會再次嘗試重新建立,因為保留在開始狀態,在建立 service後將保證呼叫onstartcommand。如果沒有傳遞任何開始命令給service,那將獲取到null的intent。
start_not_sticky 在執行onstartcommand後service程序被kill後,並且沒有新的intent傳遞給它。service將移出開始狀態,並且直到新的明顯的方法(startservice)呼叫才重新建立。因為如果沒有傳遞任何未決定的intent那麼service是不會啟動,也就是期間onstartcommand不會接收到任何null的intent。
start_redeliver_intent 在執行onstartcommand後service程序被kill後,系統將會再次啟動service,並傳入最後乙個intent給onstartcommand。直到呼叫stopself(int)才停止傳遞intent。如果在被kill後還有未處理好的intent,那被kill後服務還是會自動啟動。因此onstartcommand不會接收到任何null的intent。
二、提公升service優先順序
在androidmanifest.xml檔案中對於intent-filter可以通過android:priority = "1000"這個屬性設定最高優先順序,1000是最高值,如果數字越小則優先順序越低,同時適用於廣播。
三、提公升service程序優先順序
android中的程序是託管的,當系統程序空間緊張的時候,會依照優先順序自動進行程序的**。android將程序分為6個等級,它們按優先順序順序由高到低依次是:
3.次要服務程序(secondary_server )
5.內容**節點(content_provider)
當service執行在低記憶體的環境時,將會kill掉一些存在的程序。因此程序的優先順序將會很重要,可以使用startforeground 將service放到前台狀態。這樣在低記憶體時被kill的機率會低一些。
四、ondestory裡面傳送廣播重啟service
service +broadcast 方式,就是當service走ondestory的時候,傳送乙個自定義的廣播,當收到廣播的時候,重新啟動service;
六、監聽系統廣播判斷service狀態
通過系統的一些廣播,比如:手機重啟、介面喚醒、應用狀態改變等等監聽並捕獲到,然後判斷我們的service是否還存活,別忘記加許可權啊。
七、雙程序service
讓2個程序互相保護,其中乙個service被清理後,另外沒被清理的程序可以立即重啟程序
如何保證service在後台不被kill
推薦參考部落格 一 onstartcommand方法,返回start sticky 1 start sticky 在執行onstartcommand後service程序被kill後,那將保留在開始狀態,但是不保留那些傳入的intent。不久後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...