這篇文章將為大家詳細講解有關Android項目中如何避免service在后臺中被kill掉,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
揭陽網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、成都響應式網(wǎng)站建設公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。成都創(chuàng)新互聯(lián)公司成立與2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選成都創(chuàng)新互聯(lián)公司。
一、onStartCommand方法,返回START_STICKY
START_STICKY 在運行onStartCommand后service進程被kill后,那將保留在開始狀態(tài),但是不保留那些傳入的intent。不久后service就會再次嘗試重新創(chuàng)建,因為保留在開始狀態(tài),在創(chuàng)建 service后將保證調(diào)用onstartCommand。如果沒有傳遞任何開始命令給service,那將獲取到null的intent。
START_NOT_STICKY 在運行onStartCommand后service進程被kill后,并且沒有新的intent傳遞給它。Service將移出開始狀態(tài),并且直到新的明顯的方法(startService)調(diào)用才重新創(chuàng)建。因為如果沒有傳遞任何未決定的intent那么service是不會啟動,也就是期間onstartCommand不會接收到任何null的intent。
START_REDELIVER_INTENT 在運行onStartCommand后service進程被kill后,系統(tǒng)將會再次啟動service,并傳入最后一個intent給onstartCommand。直到調(diào)用stopSelf(int)才停止傳遞intent。如果在被kill后還有未處理好的intent,那被kill后服務還是會自動啟動。因此onstartCommand不會接收到任何null的intent。
二、提升service優(yōu)先級
在AndroidManifest.xml文件中對于intent-filter可以通過android:priority = "1000"這個屬性設置最高優(yōu)先級,1000是最高值,如果數(shù)字越小則優(yōu)先級越低,同時適用于廣播。
三、提升service進程優(yōu)先級
Android中的進程是托管的,當系統(tǒng)進程空間緊張的時候,會依照優(yōu)先級自動進行進程的回收。Android將進程分為6個等級,它們按優(yōu)先級順序由高到低依次是:
1.前臺進程( FOREGROUND_APP)
2.可視進程(VISIBLE_APP )
3.次要服務進程(SECONDARY_SERVER )
4.后臺進程 (HIDDEN_APP)
5.內(nèi)容供應節(jié)點(CONTENT_PROVIDER)
6.空進程(EMPTY_APP)
當service運行在低內(nèi)存的環(huán)境時,將會kill掉一些存在的進程。因此進程的優(yōu)先級將會很重要,可以使用startForeground 將service放到前臺狀態(tài)。這樣在低內(nèi)存時被kill的幾率會低一些。
四、onDestory里面發(fā)送廣播重啟service
service +broadcast 方式,就是當service走ondestory的時候,發(fā)送一個自定義的廣播,當收到廣播的時候,重新啟動service;
五、Application加上Persistent屬性
六、監(jiān)聽系統(tǒng)廣播判斷Service狀態(tài)
通過系統(tǒng)的一些廣播,比如:手機重啟、界面喚醒、應用狀態(tài)改變等等監(jiān)聽并捕獲到,然后判斷我們的Service是否還存活,別忘記加權限啊。
七、雙進程Service
讓2個進程互相保護,其中一個Service被清理后,另外沒被清理的進程可以立即重啟進程
八、聯(lián)系廠商,加入白名單
關于Android項目中如何避免service在后臺中被kill掉就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。