Android 如何保證service在后臺(tái)不被kill
Android 其實(shí)無(wú)法做多絕對(duì)的不被后臺(tái)kill掉,我們只能盡量使用一些操作提升不被kill的機(jī)會(huì)。
一、onStartCommand方法,返回START_STICKY
START_STICKY 在運(yùn)行onStartCommand后service進(jìn)程被kill后,那將保留在開(kāi)始狀態(tài),但是不保留那些傳入的intent。不久后service就會(huì)再次嘗試重新創(chuàng)建,因?yàn)楸A粼陂_(kāi)始狀態(tài),在創(chuàng)建 service后將保證調(diào)用onstartCommand。如果沒(méi)有傳遞任何開(kāi)始命令給service,那將獲取到null的intent。
START_NOT_STICKY 在運(yùn)行onStartCommand后service進(jìn)程被kill后,并且沒(méi)有新的intent傳遞給它。Service將移出開(kāi)始狀態(tài),并且直到新的明顯的方法(startService)調(diào)用才重新創(chuàng)建。因?yàn)槿绻麤](méi)有傳遞任何未決定的intent那么service是不會(huì)啟動(dòng),也就是期間onstartCommand不會(huì)接收到任何null的intent。
START_REDELIVER_INTENT 在運(yùn)行onStartCommand后service進(jìn)程被kill后,系統(tǒng)將會(huì)再次啟動(dòng)service,并傳入最后一個(gè)intent給onstartCommand。直到調(diào)用stopSelf(int)才停止傳遞intent。如果在被kill后還有未處理好的intent,那被kill后服務(wù)還是會(huì)自動(dòng)啟動(dòng)。因此onstartCommand不會(huì)接收到任何null的intent。
二、提升service優(yōu)先級(jí)
在AndroidManifest.xml文件中對(duì)于intent-filter可以通過(guò)android:priority = "1000"這個(gè)屬性設(shè)置最高優(yōu)先級(jí),1000是最高值,如果數(shù)字越小則優(yōu)先級(jí)越低,同時(shí)適用于廣播。
三、提升service進(jìn)程優(yōu)先級(jí)
Android中的進(jìn)程是托管的,當(dāng)系統(tǒng)進(jìn)程空間緊張的時(shí)候,會(huì)依照優(yōu)先級(jí)自動(dòng)進(jìn)行進(jìn)程的回收。Android將進(jìn)程分為6個(gè)等級(jí),它們按優(yōu)先級(jí)順序由高到低依次是:
1.前臺(tái)進(jìn)程( FOREGROUND_APP)
2.可視進(jìn)程(VISIBLE_APP )
3.次要服務(wù)進(jìn)程(SECONDARY_SERVER )
4.后臺(tái)進(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í),將會(huì)kill掉一些存在的進(jìn)程。因此進(jìn)程的優(yōu)先級(jí)將會(huì)很重要,可以使用startForeground 將service放到前臺(tái)狀態(tài)。這樣在低內(nèi)存時(shí)被kill的幾率會(huì)低一些。
四、onDestory里面發(fā)送廣播重啟service
service +broadcast 方式,就是當(dāng)service走ondestory的時(shí)候,發(fā)送一個(gè)自定義的廣播,當(dāng)收到廣播的時(shí)候,重新啟動(dòng)service;
五、Application加上Persistent屬性
六、監(jiān)聽(tīng)系統(tǒng)廣播判斷Service狀態(tài)
通過(guò)系統(tǒng)的一些廣播,比如:手機(jī)重啟、界面喚醒、應(yīng)用狀態(tài)改變等等監(jiān)聽(tīng)并捕獲到,然后判斷我們的Service是否還存活,別忘記加權(quán)限啊。
七、雙進(jìn)程Service
讓2個(gè)進(jìn)程互相保護(hù),其中一個(gè)Service被清理后,另外沒(méi)被清理的進(jìn)程可以立即重啟進(jìn)程
八、聯(lián)系廠商,加入白名單
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
- Android Service類與生命周期詳細(xì)介紹
- 詳解Android中的Service
- Android IntentService詳解及使用實(shí)例
- android使用NotificationListenerService監(jiān)聽(tīng)通知欄消息
- Android實(shí)現(xiàn)微信自動(dòng)向附近的人打招呼(AccessibilityService)
- Android AccessibilityService實(shí)現(xiàn)微信搶紅包插件
- Android Service中使用Toast無(wú)法正常顯示問(wèn)題的解決方法
- Android基于service實(shí)現(xiàn)音樂(lè)的后臺(tái)播放功能示例
- Android Service的啟動(dòng)過(guò)程分析
相關(guān)文章
Android手機(jī)衛(wèi)士之綁定sim卡序列號(hào)
這篇文章主要介紹了Android手機(jī)衛(wèi)士之綁定sim卡序列號(hào)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
android 6.0下webview的定位權(quán)限設(shè)置方法
今天小編就為大家分享一篇android 6.0下webview的定位權(quán)限設(shè)置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Android使用Intent發(fā)送短信的實(shí)現(xiàn)方法
這篇文章主要介紹了Android使用Intent發(fā)送短信的實(shí)現(xiàn)方法,結(jié)合簡(jiǎn)單實(shí)例形式分析了Android短信發(fā)送功能的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-07-07
Flutter有狀態(tài)組件StatefulWidget生命周期詳解
這篇文章主要為大家介紹了Flutter有狀態(tài)組件StatefulWidget生命周期詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Android Support Library 標(biāo)題欄(Toolbar)滾動(dòng)效果實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇Android Support Library 標(biāo)題欄(Toolbar)滾動(dòng)效果實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03
Android Drawerlayout實(shí)現(xiàn)側(cè)滑菜單效果
這篇文章主要為大家詳細(xì)介紹了Android Drawerlayout實(shí)現(xiàn)側(cè)滑菜單效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Android Studio導(dǎo)入Eclipse項(xiàng)目時(shí).so庫(kù)文件的解決方法
這篇文章主要介紹了Android Studio導(dǎo)入Eclipse項(xiàng)目時(shí)項(xiàng)目中".so"庫(kù)文件的解決方法,需要的朋友可以參考下2018-06-06
分享10個(gè)很棒的學(xué)習(xí)Android開(kāi)發(fā)的網(wǎng)站
我推薦的網(wǎng)站,都是我在學(xué)習(xí)Android 開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)的好網(wǎng)站,給初學(xué)者一些建議,少走一些彎路2015-03-03

