當前位置:編程學習大全網 - 源碼下載 - Android 7.0 和8.0 如何保活

Android 7.0 和8.0 如何保活

1.控制onStartCommand函數的返回值。

我對這個函數的理解是:當服務被異常終止時,是否重啟服務?

有些文章裏面在用這個做保活時,修改的是flag,在我實際測試中是無效。有效的做法是直接返回參數。另外默認的flags值為0,是START_STICKY_COMPATIBILITY。如下:

[java]?view plain?copy

@Override?

public?int?onStartCommand(Intent?intent,?int?flags,?int?startId)?{?

//?TODO?Auto-generated?method?stub?

return?START_STICKY;?

//return?super.onStartCommand(intent,?flags,?startId);?

}?

測試結果:

魅族的機子:無效,不管默認還是修改參數,在DDMS裏面直接結束進程後都不會重啟服務。

其它三臺機子(9100沒測):默認參數的情況下就會重啟服務,return START_STICKY 會重啟,return START_NOT_STICKY 不會重啟。

其它:1.用360壹鍵清理,或者360超級ROOT的手機優化,會殺死進程,過會兒還是會重啟,只是會慢很多,大概是在排隊重啟服務。

2.壹次測試完後確保服務重啟後,執行了onStartCommand函數。

2.在service 的onDestory裏面重啟服務

這個在所有能觸發onDestory的情況下都是有效的。4臺測試機都測試過。直接startService 或者發送廣播重啟都可以 。

但能觸發onDestory的情況,我不知道內存回收會不會觸發。另外兩種情況(2,3)是不觸發的。我的測試方法是在“設置”-》應用管理-》正在運行-》停止服務。(這個是正常停止服務,會觸發onDestory,所以上面的onStartCommand效果不會觸發。)

3.提高服務的優先級

這個主要是針對第壹種kill服務的情況,內存回收機制。由於這個測試比較難搭建。360清理什麽把後臺的進程都殺的,體現不出優先級這樣的概念。我的建議是能提高就提高。下面例幾種。

通知--前臺service

創建壹個通知使自己成為前臺service

測試結果:

360壹鍵清理和手機優化,不會把該service結束掉。

對於後臺保護:華為G730不結束service,魅族和華為TL00H都會結束service。

通知欄的保活效果還是可以的,壹般的應用要求基本能滿足了。

若有root權限:

android:persistent="true",並放入system/app中

測試結果:效果壹般,三星9100上用360等清理工具殺不掉進程,在華為G730上沒什麽效果.(這個測試跟onStartCommand有點幹擾)

4.守護進程

雙服務

360會同時殺掉兩個服務,分兩個apk也壹樣。

native守護進程

360不會殺掉native的守護進程,但在魅族和華為TL00H中待機壹段時間後還是會被殺掉。

結論和待續

1.壹般的應用添加到後臺保護進程後,改個onStartCommand返回值,再加個通知。基本上大部分都能保活了。

2.雙服務我覺得沒有native守護進程來的好,雖然360,微信什麽的都有幾個進程服務,但如果不添加到後臺保活的話,效果壹樣不能保活,也會進入停止狀態。

3.但是.360手機助手會創建雙natice守護進程做相互的看守。存活的效果會高壹點點。“沒添加到後臺保活”壹般只會殺壹次,(魅族是屏幕關閉後5分鐘,華為TL00H是屏幕關閉時)

  • 上一篇:軟件開發的制約因素有什麽呢?
  • 下一篇:orangeトーマ 羅馬音 謝謝QVQ~
  • copyright 2024編程學習大全網