2010-07-19 120 views
5

我有一個必須永久運行的後臺服務。該服務只需與我的活動進行交互。本地服務或遠程服務?

  1. 如何檢查活動恢復如果服務仍在運行?在服務類中有沒有比靜態變量更好的可能性?

  2. 在單獨的進程中使用遠程服務(以延長服務生命週期)是否有利,以便在活動進程被終止時服務仍然存在?

+0

'adb bugreport'告訴我,我的服務崩潰太多並被銷燬 – OneWorld 2010-12-21 14:31:02

回答

7

我有一個後臺服務必須 運行永久。

This is not possible。用戶或Android會在某個時候終止您的服務。請重新考慮你的架構。

如何檢查活動恢復如果 該服務仍在運行?

一般來說,你沒有。

在服務類中有比靜態變量更好的可能性嗎?

如果用戶或Android終止您的服務,那麼這將不起作用。

是它的優勢,在一個單獨的進程中使用遠程 服務(以 延長使用壽命的時間),以便當 活動過程中被殺死的 服務還活着?

遠程服務與活動被銷燬後服務是否運行無關。如果調用startService(),運行服務,獨立於任何活動的,直到:

  • 你從一個活動叫stopService()
  • 服務調用stopSelf()
  • 的Android終止
  • 用戶終止服務通過設置應用程序服務
  • 用戶通過「任務殺手」終止服務(Android 2.1及更低版本,至少)
+0

以及如果後臺服務仍在執行其工作,它希望用戶如何通知活動再次出現? – Sney 2010-07-22 13:57:58

+0

@Snej:我不明白你的問題,對不起。 – CommonsWare 2010-07-22 23:52:44

+0

對不起,我最後的評論有點混亂,直到我意識到它。問題是如何確定用戶何時重新啓動應用程序,以確定後臺服務是否仍在運行或已被終止。 通過Macarse的回答一個意圖可以拋出服務。但是,我怎麼才能知道該服務是重新啓動還是仍在運行? – Sney 2010-08-20 20:45:47

3

爲什麼你想知道服務是否正在運行? 如果你需要一些東西,只要扔一個Intent,如果它沒有運行,它將從意圖開始。

與第二個問題關係:

您的服務不會「死」的時候你的活動關閉。

+1

我想知道它,因爲應用程序正在記錄GPS數據,並且永久登錄至關重要。所以我想通過活動讓用戶知道是否由於異常或終止服務而停止記錄。 – Sney 2010-07-21 09:18:29

+0

我和Snej有同樣的擔憂。 – gregm 2010-08-17 13:33:13

+1

@Sney:這是一個黑客攻擊,但你可以嘗試從服務中發送「廣播」,讓每個人都知道你還活着。 – Macarse 2010-10-14 12:40:14

3

startforeground()開始服務。它會增加服務的時間。