2013-08-19 75 views
0

我正在處理我的第一個android應用程序,它的功能是它有一個活動,它在登錄後啓動一個服務,在一段時間或任何時間後將用戶位置壓入服務器用戶位置變化。現在用於從服務到活動的通信,我正在使用BroadcastReceiver。從服務中發送廣播殺死活動

將位置記錄到服務器之後的服務廣播我的活動收到的消息並相應地更新UI。現在一切都很好,直到這一點,但當我從後臺刪除我的活動,而我的服務仍在後臺運行時,會發生什麼情況是,只要服務記錄服務器上的位置並廣播消息,它就會崩潰並顯示一條消息在屏幕上說你的應用程序已經停止。

我認爲,android廣播系統期望我的活動是活着接收廣播,當它沒有找到它然後崩潰的服務。

我想要的是,如果我的活動在附近,它會收到廣播,但如果不是,那麼廣播應該被忽略。它不應該使我的服務崩潰。

我按照正確的步驟註冊onResume()中的服務並在onPause()中取消註冊。此外,我正在動態註冊服務,而不是在清單中。

回答

0

我在那裏犯了一個愚蠢的錯誤。我正在將我的活動中定義的變量的引用傳遞給廣播服務。當我的活動還活着時,它工作得很好,但是當我的活動被殺死時,服務最終導致空指針在更新時崩潰了服務。

0

你應該使用bindService(intent)startservice(intent)無限期內部的time.so它會工作,直到你的活動是綁定到你的服務,當你完成的活動,然後調用onUnbind()

onDestroy()in activity call stop service。

檢查清單,您的接收器沒有在那裏註冊。