2012-10-12 118 views
3

我試圖實現前臺服務,並試圖瞭解它如何處理崩潰。瞭解前臺服務生命週期

我創建了一個簡單的服務類似下面的一個:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    checkRunningAndStartForeground(); 
    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    crashAfterTenSeconds(); 
} 

@Override 
public void onDestroy { 
    super.onDestroy(); 
    if(isRunning) { 
     isRunning = false; 
     stopForeground(true); 
    } 
} 

什麼情況是,服務在前臺開始,然後崩潰,符合市場預期。這是計劃由系統重新啓動。如預期的那樣,它重新啓動並再次崩潰。之後,它不會重新啓動。

我的問題是,它爲什麼重新啓動一次,但不是兩次?我希望它在每次崩潰後繼續重新啓動。

我擔心的是,如果我的應用程序正在運行,並以某種方式崩潰兩次,那麼它將永遠不會重新啓動。

例如,它在開始時崩潰一次,運行一兩天又崩潰,這是否意味着它不會回來?

+0

警告:我沒有閱讀過Android的源代碼,所以我只是在這裏猜測 - Android在崩潰後自動重新啓動您的服務。如果您的服務在啓動時總是崩潰,那麼Android不會希望繼續重新啓動它。爲了防止「開始 - 崩潰 - 開始 - 崩潰...」的無限循環,Android可能會記住您的服務崩潰並且不會重新啓動。我會想象你的服務每10秒崩潰就會觸發這種行爲。嘗試每10分鐘崩潰一次,看看它是否工作不同。 –

回答

0

正如David在評論中所建議的那樣,我試圖增加崩潰時間間隔,但它沒有幫助。我相信android會存儲服務崩潰的次數,如果它崩潰了2次,不管間隔是多少,那麼它會停止重新啓動它。我相信這是不同的,當android終止內存服務,我沒有得到android做的前臺服務。