为什么Android的闹钟管理器会忘记闹钟?

时间:2016-12-11 10:02:08

标签: android alarmmanager android-alarms

我设置闹钟以在不同时间通知用户。我查看" adb shell dumpsys alarm"他们看起来像

  

RTC_WAKEUP#2:闹钟{433c7328 type 0 com.app.package}       type = 0 whenElapsed = 89936417 when = + 9h8m5s417ms window = -1 repeatInterval = 0 count = 0       operation = PendingIntent {42e8e7f8:PendingIntentRecord {42deb070 com.app.package broadcastIntent}}

有时他们会留下来并且工作至少2天(我没有经过更长时间的测试),有时甚至在第一次通知发生之前他们都已经消失了几天,并且" adb shell dumpsys alarm"不再显示我的任何条目。 (我测试了2台设备,Android 4.0和4.4)

我知道警报管理器在重新启动设备后忘记了这些条目,我处理了这种情况并在之后重新添加它们。但显然还有其他情况,警报管理器在没有重新启动的情况下忘记了条目。我想知道这些是哪些案件以及如何处理它们。

1 个答案:

答案 0 :(得分:0)

来自AlarmManager

此类提供对系统警报服务的访问。这些允许您安排应用程序在将来的某个时间运行。当闹钟响起时,系统会广播已为其注册的Intent,如果目标应用程序尚未运行,则会自动启动它。设备处于睡眠状态时会保留已注册的警报(如果设备在此期间关闭,则可以选择将设备唤醒),但如果设备关闭并重新启动,则会清除设备。
它将一直有效,直到您的应用程序被杀死或设备已重新启动。(如果您从最近的列表中删除了一个应用程序,或者从应用程序管理器中删除了应用程序。这意味着您将完全杀死应用程序。然后应用程序的AlarmManager已被删除。)
在某些情况下,当你的应用程序在后台安卓杀死它以访问更多的RAM。

您可以在How to create a persistent AlarmManagerHow to save Alarm after app killing?

了解有关应用程序终止的更多信息