我有一個長時間運行的服務,響應多個BroadcastReceivers
(在代碼中創建,而不是清單)。大多數情況下,服務運行良好,但有時會停下來(BroadcastReceivers
停止工作) - 我想系統會以某種方式暫停它(當我查看設備上正在運行的進程時,我可以清楚地看到服務仍然是「運行」)。onDestroy在Android服務
我不知道服務暫停的正確原因,但我想知道在這些情況下是否調用onDestroy()
方法或是否有機會以某種方式處理此問題。
我認爲onDestroy()
沒有被調用,因爲服務在Running processes選項卡中仍然可見。我也有該服務返回START_STICKY
標誌,以便系統在出於內存原因死亡時重新啓動它。此外,如果它以某種方式「暫停」,是否有可能爲此創建WakeLock
?
我知道最好的解決方案是將所有BroadcastReceivers
放入清單並創建一個叫做onReceive()
方法的一次性服務。然而,我選擇了長時間運行服務的方式,因爲初始化階段非常緊湊,所以最好只初始化一次。
感謝您的回答。問題在於服務大部分時間沒有做任何事情,只是對BroadcastReceivers做出響應。我寧願將WakeLocks放入onReceive()方法中。但是,由於服務暫停,onReceive方法甚至不會被觸發,因此WakeLock內部也不會被使用,對吧? – NumberFour
@NumberFour從來沒有試過這個。嘗試在onReceive被觸發後立即獲取WakeLock。如果它沒有工作,嘗試註冊一個靜態接收器(在清單中)並查看它是否被喚醒。 –
要試試這個,謝謝 – NumberFour