AlarmManagers應該被聲明和初始化的適當上下文是什麼,以便它們無限期地持續下去(或直到系統重新啓動或直到任務殺手完全清除掉)並避免垃圾集合 - 但也允許在整個應用程序範圍內更改警報。Android AlarmManager長時間停止射擊
我使用AlarmManager的全部原因是爲了解決需要隨時運行服務的問題。然而要完成這個壯舉,AlarmManager創建在哪裏?我會想象它不能在一個服務中創建,然後關閉/銷燬,因爲報警對象最終會消失,並且報警會停止發射 - 不是嗎?
我喜歡從不同問題文章中的AlarmManager例子的想法,其中MyAlarm類被創建爲警報的onReceive的BroadcastReceiver的擴展,並且AlarmManager在這個類的構造函數中初始化。但是,如果跨多個上下文需要MyAlarm實例,該實現如何工作。例如,從多個Activity對象的事件處理程序中。來自多個Widgets的事件處理程序。來自工人服務。所有這些都可能必須禁用或啓用警報。我的猜測是,在需要處理警報的地方創建一個本地實例,並且因爲所有實例的pendingIntent都是相同的,所以實際上您將使用虛擬「單例」。
這只是在這一點上的概念,因爲我不知道如何測試可能發生的報警管理器的「垃圾回收」8,12?幾小時後,當我的鬧鈴隨機停止射擊時。我的目標是,如果手機沒有重新啓動,並且我的任務不會被用戶手動殺死,以保持無限期地發出警報。謝謝
對不起,我的目標是使用AlarmManager,以便我的服務不需要繼續運行。警報實際上會啓動服務,服務完成後會關閉。真正的問題是,我在哪裏初始化給定的pendingIntent的AlarmManager實例,以便它始終保持運行,即使它最初聲明的服務不再運行? – gauglerb 2012-04-26 23:40:19
服務只是一個持續存在的後臺進程,這樣您就可以執行諸如保持偵聽器打開的功能。您無法初始化AlarmManager,以便它在服務中初始化並保持該服務在運行時「永久運行」。就像我說的,你可以通過偶爾做一些事情來堅持它,所以操作系統不認爲這是一個死的過程。人們在屏幕上使用喚醒手柄很多,這樣,每當用戶喚醒手機時,你就可以做一些事情。由於這通常足以確保操作系統不會終止服務,所以我會嘗試。 – 2012-04-27 21:32:41