Android 如何保證service在后臺不被kill
Android 其實(shí)無法做多絕對的不被后臺kill掉,我們只能盡量使用一些操作提升不被kill的機(jī)會。
一、onStartCommand方法,返回START_STICKY
START_STICKY 在運(yùn)行onStartCommand后service進(jìn)程被kill后,那將保留在開始狀態(tài),但是不保留那些傳入的intent。不久后service就會再次嘗試重新創(chuàng)建,因?yàn)楸A粼陂_始狀態(tài),在創(chuàng)建 service后將保證調(diào)用onstartCommand。如果沒有傳遞任何開始命令給service,那將獲取到null的intent。
START_NOT_STICKY 在運(yùn)行onStartCommand后service進(jìn)程被kill后,并且沒有新的intent傳遞給它。Service將移出開始狀態(tài),并且直到新的明顯的方法(startService)調(diào)用才重新創(chuàng)建。因?yàn)槿绻麤]有傳遞任何未決定的intent那么service是不會啟動,也就是期間onstartCommand不會接收到任何null的intent。
START_REDELIVER_INTENT 在運(yùn)行onStartCommand后service進(jìn)程被kill后,系統(tǒng)將會再次啟動service,并傳入最后一個intent給onstartCommand。直到調(diào)用stopSelf(int)才停止傳遞intent。如果在被kill后還有未處理好的intent,那被kill后服務(wù)還是會自動啟動。因此onstartCommand不會接收到任何null的intent。
二、提升service優(yōu)先級
在AndroidManifest.xml文件中對于intent-filter可以通過android:priority = "1000"這個屬性設(shè)置最高優(yōu)先級,1000是最高值,如果數(shù)字越小則優(yōu)先級越低,同時(shí)適用于廣播。
三、提升service進(jìn)程優(yōu)先級
Android中的進(jìn)程是托管的,當(dāng)系統(tǒng)進(jìn)程空間緊張的時(shí)候,會依照優(yōu)先級自動進(jìn)行進(jìn)程的回收。Android將進(jìn)程分為6個等級,它們按優(yōu)先級順序由高到低依次是:
1.前臺進(jìn)程( FOREGROUND_APP)
2.可視進(jìn)程(VISIBLE_APP )
3.次要服務(wù)進(jìn)程(SECONDARY_SERVER )
4.后臺進(jìn)程 (HIDDEN_APP)
5.內(nèi)容供應(yīng)節(jié)點(diǎn)(CONTENT_PROVIDER)
6.空進(jìn)程(EMPTY_APP)
當(dāng)service運(yùn)行在低內(nèi)存的環(huán)境時(shí),將會kill掉一些存在的進(jìn)程。因此進(jìn)程的優(yōu)先級將會很重要,可以使用startForeground 將service放到前臺狀態(tài)。這樣在低內(nèi)存時(shí)被kill的幾率會低一些。
四、onDestory里面發(fā)送廣播重啟service
service +broadcast 方式,就是當(dāng)service走ondestory的時(shí)候,發(fā)送一個自定義的廣播,當(dāng)收到廣播的時(shí)候,重新啟動service;
五、Application加上Persistent屬性
六、監(jiān)聽系統(tǒng)廣播判斷Service狀態(tài)
通過系統(tǒng)的一些廣播,比如:手機(jī)重啟、界面喚醒、應(yīng)用狀態(tài)改變等等監(jiān)聽并捕獲到,然后判斷我們的Service是否還存活,別忘記加權(quán)限啊。
七、雙進(jìn)程Service
讓2個進(jìn)程互相保護(hù),其中一個Service被清理后,另外沒被清理的進(jìn)程可以立即重啟進(jìn)程
八、聯(lián)系廠商,加入白名單
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!
- Android Service類與生命周期詳細(xì)介紹
- 詳解Android中的Service
- Android IntentService詳解及使用實(shí)例
- android使用NotificationListenerService監(jiān)聽通知欄消息
- Android實(shí)現(xiàn)微信自動向附近的人打招呼(AccessibilityService)
- Android AccessibilityService實(shí)現(xiàn)微信搶紅包插件
- Android Service中使用Toast無法正常顯示問題的解決方法
- Android基于service實(shí)現(xiàn)音樂的后臺播放功能示例
- Android Service的啟動過程分析
相關(guān)文章
淺析Android手機(jī)衛(wèi)士接收短信指令執(zhí)行相應(yīng)操作
通過廣播接收者,接收到短信,對短信內(nèi)容進(jìn)行判斷,如果為我們指定的值就執(zhí)行相應(yīng)的操作。本文給大家介紹Android手機(jī)衛(wèi)士接收短信指令執(zhí)行相應(yīng)操作,感興趣的朋友參考下吧2016-04-04Android DaggerActivityComponent錯誤解決辦法詳解
這篇文章主要介紹了Android DaggerActivityComponent錯誤解決的相關(guān)資料,需要的朋友可以參考下2017-05-05Android?Flutter控件封裝之視頻進(jìn)度條的實(shí)現(xiàn)
這篇文章主要來和大家分享一個很簡單的控制器封裝案例,包含了基本的播放暫停,全屏和退出全屏,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-06-06詳解Android中使用Notification實(shí)現(xiàn)進(jìn)度通知欄(示例三)
這篇文章主要介紹了詳解Android中使用Notification實(shí)現(xiàn)進(jìn)度通知欄(示例三),具有一定的參考價(jià)值,有興趣的可以了解一下。2016-12-12Android中webview與JS交互、互調(diào)方法實(shí)例詳解
這篇文章主要介紹了Android中webview與JS交互、互調(diào)方法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03Android使用觀察者模式Observer實(shí)現(xiàn)網(wǎng)絡(luò)狀態(tài)監(jiān)聽
這篇文章主要為大家詳細(xì)介紹了Android使用觀察者模式Observer實(shí)現(xiàn)網(wǎng)絡(luò)狀態(tài)監(jiān)聽,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05android 設(shè)置圓角圖片實(shí)現(xiàn)代碼
在android應(yīng)用開發(fā)中,可能是美化需要,圖片需要處理成圓角,本文將給出實(shí)現(xiàn)代碼,開發(fā)中的遇到此問題的朋友可以參考下2012-11-11Android使用相機(jī)實(shí)現(xiàn)拍照存儲及展示功能詳解
這篇文章主要介紹了Android使用相機(jī)實(shí)現(xiàn)拍照存儲及展示功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01