Android 如何处理为过去设置的警报

How does Android handle alarms set for the past

在我的应用程序中,我想在大约指定时间触发重复警报以检查某些情况并在必要时通知用户。

我正在使用以下代码安排闹钟:

Calendar cal = ...;
...

mAlarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), AlarmManager.INTERVAL_DAY, mAlarmIntent);

我现在注意到(因为我在 cal 不小心弄错了日期)如果 cal 是过去的某个 date/time,警报会立即触发。

假设现在是 2016-09-20 18:00:00,我为 2016-09-20 17:00:00 安排了闹钟。我会立即收到通知(或在安排闹钟后几秒钟)。如果我将闹钟安排在 2016-09-20 18:15:00.

等未来时间,则不会发生这种情况

所以我的问题是:

  1. 会不会Android总是能赶上错过的闹钟?
  2. 闹钟计划每天重复。然后它会在明天 17:00:00 重复还是会在 18:00:00 重复,因为那是最后一次触发警报的时间?

Will Android always catch up on the missed alarm?

如果设置的时间已经过去,那么android尽快触发警报。 check the docs

The alarm is scheduled to repreat daily. Will it then repeat at 17:00:00 tomorrow or will it be at 18:00:00, because that was when the alarm was last triggered?

下次准时触发

附加信息:如果使用清除应用程序数据或从应用程序管理器强行关闭您的应用程序,则警报不会触发,直到用户再次打开您的应用程序并重新启动也可能导致此问题.