android複習路之不死的service

如何保證Service不死:

1.onStartCommand方法中返回START_STICKY。在運行onStartCommand後Service被進程Kill之後,服務會嘗試再次創建,因爲保留在開始狀態,服務會調用onStartCommand()。如果沒有任何參數傳遞給Service,那麼將會獲得一個null的intent。返回START_STICKY如果有未完成的啓動服務 的intent未發送完,後續的intent會繼續發送。不執行命令但是需要一直待命。

2.提升service的優先級,在AndroidManifest.xml文件中對於intent-filter可以通過android:property="1000"來設定服務的優先級,優先級越高月不容易殺死。

3,提高service的進程優先級,android中的進程是託管的如果當前系統內存不足的時候,會根據優先級kill一些。android中的進程分爲6個級別,前臺進程(FOREGROUND_APP),可視進程(VISIBLE_APP) ,次要服務進程(SECONADRY_SERVICE),後臺進程(HIDDEN_APP),內容提供者節點(CONTEXT_PROVIDER),空進程(EMPTY_APP)。在onStartCommand中使用startForegrount()將服務放到前臺進程進行運行,這樣被kill的機率會變低,但是極低內存下還是會被kill。在onDestory()中要stopForeground(true)。

4.在onDestory方法中重啓service。第一種在onDestory中直接startService,或者是service+broadcast,就是當service走到onDestory的時候發送一個自定廣播接收到後重啓。

5.可以監聽系統廣播進行判斷我們自己的廣播是否還活着。

IentService:

intentService是Service的子類,它的特點是會獨自創立一個worker線程來處理所有的intent,會創建獨立的worker線程來處理onHanderIntend()方法實現的代碼,無需處理多線程問題,所有的請求完成後IntentService會自動停止。使用IntentService實現兩個方法1.構造函數IntentService調用super("name")。重寫onHandleIntent()。根據intent去處理utong的事物。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章