Android AlarmManager重新安排逻辑

时间:2012-06-09 15:25:02

标签: android logic alarmmanager

我有一个应用程序,允许用户安排闹钟在特定时间响起,并按照他们选择的间隔重复。我正在使用JSON来保存警报详细信息,使用SharedPreferences作为存储。

我正在使用AlarmManager来安排应该通知我的应用程序应该发出警报通知用户的时间。我目前正在使用AlarmManager的setRepeating()方法,提供用户提供的时间间隔。这很好用,理论上应用程序永远不需要更新存储下一个闹钟时间的JSon,因为AlarmManager将使用间隔重新安排下一个闹钟时间。

但是,我的想法是,当设备重新启动时,我需要为AlarmManager提供最新的闹钟时间,以避免AlarmManager认为已经错过了警报,因为这不一定是情况下。

那么,最好的方法是什么?

  • 在闹钟响起时更新JSon下一个闹钟时间,即使这可能没有必要(只要没有重启,setRepeating()就会处理这个)?
  • 注册并收听关机广播并更新JSon(这会引发一些问题 - 考虑到手机正在关闭,应用程序计算并将警报详细信息写入存储的时间有多长?)
  • 不要更新JSon,而是通过AlarmManager向唤醒的对象添加逻辑,以确定刚播出的警报是否有效并且应该警告用户?

我确信上述任何一项都有效,但我无法确定哪种方式最好。

1 个答案:

答案 0 :(得分:1)

这似乎主要是一个选择问题。您注意到的问题与Linux笔记本电脑中出现的一般问题相似,并由anachrond解决。在我看来,我只是更新时间并在每次收到事件时将其存储在SharedPreferences中。试图在系统关闭时进行监听可能并不完全可靠(当您的用户 - 可能是醉酒的大学生 - 放弃他们的设备并且电池飞出来时会发生什么?)。相反,我认为在这种情况下最好的办法是 - 每次警报触发时 - 重新计算发送下一个警告的时间,将其存储在某个地方,并在适当的启动时间表上进行。