2016-12-11 117 views
1

我設置了警報以在不同的時間通知用戶。我檢查與 「亞行殼dumpsys報警」 和它們看起來像爲什麼Android的鬧鐘管理器會忘記鬧鐘?

RTC_WAKEUP#2:報警{433c7328類型0 com.app.package} 類型= 0 whenElapsed = 89936417時= + 9h8m5s417ms窗口= -1按repeatInterval = 0計數= 0 操作= {的PendingIntent 42e8e7f8:PendingIntentRecord {42deb070 com.app.package broadcastIntent}}

有時他們留下來,爲至少2天的工作(我沒有測試更長),有時他們幾個小時後都會消失,即使在第一次通知應該發生之前,「adb shell dumpsys alarm」也不會顯示我的任何條目。 (我測試了2個設備,Android 4.0和4.4)

我知道警報管理器在設備重新啓動後忘記了條目,我負責處理這種情況,然後重新添加它們。但顯然還有其他一些情況,即警報管理器在沒有重新啓動的情況下忘記了條目。我想知道這些是哪些情況以及如何處理它們。

回答

0

AlarmManager

這個類提供訪問系統報警服務。這些允許您安排您的應用程序在未來的某個時間點運行。當警報關閉時,已爲系統註冊的Intent被系統廣播,如果目標應用程序尚未運行,則會自動啓動。註冊的警報在設備處於睡眠狀態時保留(如果在此期間關閉設備,可以選擇將設備喚醒),但如果設備關閉並重新啓動,則會被清除。
它會一直工作,直到你的應用程序被終止或設備已被重新啓動(如果你從最近的列表中刪除了應用程序,或從應用程序管理器中刪除了應用程序,這意味着你完全被殺死了應用程序。您的應用程序的AlarmManager已被刪除。)
在某些情況下,當您的應用程序在後臺android將其殺死以訪問更多內存。

您可以在How to create a persistent AlarmManager閱讀更多關於應用程序殺的,How to save Alarm after app killing?