我正在寫一個汽車揚聲器應用程序,裏面有一個服務,並聽取電話狀態的變化。一個服務可以被任務殺手扼殺
我希望服務應該一直存在,不能被殺死。
但是,我發現如果我使用某個任務殺手來殺死我的應用程序,那麼我的偵聽程序將會有幾秒鐘無法工作。
雖然我的應用程序似乎幾秒鐘後自動重新啓動,並再次工作。
爲什麼服務仍然可以被任務殺手殺死?
服務就像一個活動,只是沒有用戶界面,並且能夠自動重啓?
感謝您的回答。
我正在寫一個汽車揚聲器應用程序,裏面有一個服務,並聽取電話狀態的變化。一個服務可以被任務殺手扼殺
我希望服務應該一直存在,不能被殺死。
但是,我發現如果我使用某個任務殺手來殺死我的應用程序,那麼我的偵聽程序將會有幾秒鐘無法工作。
雖然我的應用程序似乎幾秒鐘後自動重新啓動,並再次工作。
爲什麼服務仍然可以被任務殺手殺死?
服務就像一個活動,只是沒有用戶界面,並且能夠自動重啓?
感謝您的回答。
當您需要資源時,您無法免除您的服務被用戶或操作系統自動終止。
您可以做的最好的嘗試是編寫代碼來補償重新啓動,但肯定不會寫入,就好像您的服務將無一例外地永遠運行。
編輯
Android開發者文檔Managing the Lifecycle of a Service對從停止恢復並在回調鉤子被調用,而不是有用的信息。
因爲帶走了用戶在他/她想要錯誤時結束進程的能力。相反,如果服務關閉,請嘗試編寫解決方案,以便XXXXXX發生。
這一招添加到您服務的onCreate:
startForeground(R.string.app_name, new Notification());
這將防止從服務收盤在低內存,任務殺等。
你能告訴我,我怎麼彌補這個問題,並避免那幾秒鐘的空白?謝謝。 – dong221 2011-03-18 17:20:18
@ dong221根據關機類型,您可以做的任何事情都無法挽回浪費的時間,無論是幾秒鐘還是更長時間。我建議閱讀服務生命週期中的Android開發者文檔,我將用鏈接編輯我的答案。 – 2011-03-18 17:22:46