2010-10-08 153 views
1

我正在嘗試編寫一個服務,它位於並等待SMS消息(使用服務器註冊的BroadcastReceiver),並將根據SMS消息的細節採取一些操作。我使用Activity來啓動服務的startService()和stopService()。關閉Activity之後,Service繼續保持其狀態,並且它的BroadcastReceiver正在等待,因爲它應該......但是,隨着時間的推移,我發現服務會隨機重啓。也就是說,即使服務已經啓動,onCreate()和onStartCommand()也會被調用。這種情況有時會發生,當我的電話坐在一夜之間...Android服務隨機重新啓動

任何人都可以提供洞察,爲什麼這是(電話請求資源和殺死服務?),我可以做什麼來防止它,或我可以做什麼來防止該服務的狀態不會丟失?

在此先感謝。

回答

0
+0

這阻止了服務被殺。但是,我使用的任何處理程序在長時間過後都不起作用。 – jkiv 2010-10-11 01:40:15

0

我不認爲你需要從活動開始服務。讓廣播接收機收聽您的SMS消息並啓動服務。工作完成後,服務應該調用stopSelf();

+0

活動是否應該註冊/取消註冊BroadcastReceiver?一旦活動消失,BroadcastReceiver會發生什麼? – jkiv 2010-10-08 18:07:03

+0

您可以在清單中定義您的接收器以及它想要收聽的操作。更多信息在這裏 http://developer.android.com/reference/android/content/BroadcastReceiver.html和這裏http://developer.android.com/guide/appendix/faq/commontasks.html#broadcastreceivers – 2010-10-08 18:32:07

+0

無論活動 - 廣播接收器 - 服務關係,onCreate()和onStartCommand()在服務工作時被調用。奇怪的是,服務狀態報告的原因是,如果服務人員啓動了服務,它會是新的。然而,在收到短信後,我可以讓服務部門報告其狀態,並且如果它正在工作,它的狀態就會顯示出來。這導致我認爲服務的第二個實例正在創建? – jkiv 2010-10-08 21:55:39

0

的Android有時(當它的資源不足,MEM/CPU)運行刪除服務,一旦它的高資源再帶來他們回來。這就是爲什麼你看到你的服務在夜間重新啓動了幾次。