如何讓Service自動重啓而不被kill掉

如何讓Service自動重啓而不被kill掉

 

重寫service的onStartCommand方法。
@Override   
public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;   
}
   簡單介紹下這個方法,在Android開發的過程當中,每次調用startService(Intent)的時候,都會調用該Service對象的onStartCommand(Intent,int,int)方法,而後在onStartCommand方法中作一些處理。而後咱們注意到這個函數有一個int的返回值,這篇文章就是簡單地講講int返回值的做用。    從Android官方文檔中,咱們知道onStartCommand有4種返回值:
    START_STICKY:若是service進程被kill掉,保留service的狀態爲開始狀態,但不保留遞送的intent對象。隨後系統會嘗試從新建立service,因爲服務狀態爲開始狀態,因此建立服務後必定會調用onStartCommand(Intent,int,int)方法。若是在此期間沒有任何啓動命令被傳遞到service,那麼參數Intent將爲null。
    START_NOT_STICKY:「非粘性的」。使用這個返回值時,若是在執行完onStartCommand後,服務被異常kill掉,系統不會自動重啓該服務。
    START_REDELIVER_INTENT:重傳Intent。使用這個返回值時,若是在執行完onStartCommand後,服務被異常kill掉,系統會自動重啓該服務,並將Intent的值傳入。
START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保證服務被kill後必定能重啓。
固然也還有其餘解決方案,可是或多或少都會出現一些弊端或者相對來講比較麻煩。在這裏舉幾個最多見的例子:
1.在onDestory方法中重啓Service服務,通常來講,這樣作是能夠的。可是若是這樣----》設置-->下載-->強制中止。則不會執行ondestory方法,或者經過別人應用,如360直接kill掉個人應用時,也是不會調用Service的ondestory方法的。
2.修改AndroidManifest.xml
<manifest  xmlns:android="http://schemas.android.com/apk/res/android"
        android:sharedUserId="android.uid.system">     
<application android:icon="@drawable/icon"
android:label="@string/app_name" android:allowClearUserData="false"
          android:process="system"  android:killAfterRestore="false">
若是在加入了此部分代碼,表示該程序運行在system進程組中,system進程組是沒有權限訪問sd卡的,並且service是不會自動重啓的。
3.提升service的優先級別,無論你service的優先級別有多高,用戶都是能夠手動殺死的.
等等還有其餘不少種方式,這裏就不一一列舉了。

    因此若是要使本身的Service可以一直運行,最簡單的方法就是重寫onStartCommand方法就行了.可是千萬不要作壞事,不要作被用戶鄙視的惡意程序
相關文章
相關標籤/搜索