2

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

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

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

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

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

我确信上述任何方法都可以,但我无法决定哪种方法最好。

4

1 回答 1

1

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

于 2012-06-09T20:22:04.573 回答