2011-10-04 81 views
0

我正在構建一個應用程序,我需要一個永遠不會像android系統服務那樣停止的服務。我可以讓系統使用start_not_sticky重新啓動我的服務,但不能保證我的服務永遠不會停止。所以我的想法是,如果有任何方式可以廣泛接收我的服務將關閉時,我可以重新啓動服務。有什麼方法可以接收?服務關閉時收到

+0

你的服務被殺害我覺得你可以做的onDestroy一些事情()........... – viv

+1

你爲什麼不跑你的服務的前景? startForeground()可供您運行關鍵服務。 – PH7

回答

1

的文檔最好的解釋是:

  • 使用startForeground(int, Notification) API把服務前臺狀態,當系統認爲它是一些用戶正在積極瞭解的,因此不給候選人內存不足時會造成死亡。 (從目前的前臺應用程序在極端內存壓力下,該服務在理論上仍然有可能被殺死,但實際上這應該不是問題。)

  • 注意這意味着大部分時間您的服務正在運行如果系統處於高內存壓力下,它可能會被系統殺死。如果發生這種情況,系統將稍後嘗試重新啓動服務。這樣做的一個重要結果是,如果您實現onStartCommand()來安排異步或在另一個線程中完成工作,那麼您可能希望使用START_FLAG_REDELIVERY讓系統爲您重新提供一個意圖,以便它不會丟失如果在處理它

+0

實際上我在我的一個應用程序中使用了startForeground()方法,但不幸的是它不能很好地工作,仍然有時候我的服務通過系統停止。然後我用警報解決了這個問題,當我需要做一些工作時觸發警報。如果您考慮電池消耗,您知道警報是昂貴的。這就是爲什麼我需要更好的東西。 –