2011-03-18 146 views
2

我正在寫一個汽車揚聲器應用程序,裏面有一個服務,並聽取電話狀態的變化。一個服務可以被任務殺手扼殺

我希望服務應該一直存在,不能被殺死。

但是,我發現如果我使用某個任務殺手來殺死我的應用程序,那麼我的偵聽程序將會有幾秒鐘無法工作。

雖然我的應用程序似乎幾秒鐘後自動重新啓動,並再次工作。

爲什麼服務仍然可以被任務殺手殺死?

服務就像一個活動,只是沒有用戶界面,並且能夠自動重啓?

感謝您的回答。

回答

3

當您需要資源時,您無法免除您的服務被用戶或操作系統自動終止。

您可以做的最好的嘗試是編寫代碼來補償重新啓動,但肯定不會寫入,就好像您的服務將無一例外地永遠運行。

編輯

Android開發者文檔Managing the Lifecycle of a Service對從停止恢復並在回調鉤子被調用,而不是有用的信息。

+0

你能告訴我,我怎麼彌補這個問題,並避免那幾秒鐘的空白?謝謝。 – dong221 2011-03-18 17:20:18

+0

@ dong221根據關機類型,您可以做的任何事情都無法挽回浪費的時間,無論是幾秒鐘還是更長時間。我建議閱讀服務生命週期中的Android開發者文檔,我將用鏈接編輯我的答案。 – 2011-03-18 17:22:46

0

因爲帶走了用戶在他/她想要錯誤時結束進程的能力。相反,如果服務關閉,請嘗試編寫解決方案,以便XXXXXX發生。

2

這一招添加到您服務的onCreate:

startForeground(R.string.app_name, new Notification()); 

這將防止從服務收盤在低內存,任務殺等。