如果我添加了一个警报,但将开始日期设置为过去的日期,会发生什么?
is是立即被执行,还是被放入队列而从未执行?
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, startDate, repeatingValue, alarmIntent);
根据文档,如果startDate时间在过去,则会立即触发警报。
如果日期在过去,则会立即触发警报。但是,您可以尝试使用setInexactRepeating
而不是setRepeating
:
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, startDate, setInexactRepeating , alarmIntent);
来自setInexactRepeating()文档:
安排具有不精确触发时间要求的重复警报;例如,每小时重复一次的警报,但不一定在每个小时的顶部。
实际上AlarmManager使用当前时间。因此,当您设置过去日期报警时,AlarmManager将执行
public void onReceive(Context context, Intent intent)
{
}
方法。
我认为警报只设置了几个小时(至少通过Android用户界面),而不是特定的一天,这样它将在您设置的确切hour:minute
上启动。
我可以从以前使用AlarmManager
的经验中得出结论。过去的日期将立即触发警报。
据我所知,当时间设置为过去时间时,AlarmManager.set将立即执行,文档中也说明了这一点。AlarmManager.setInexatRepeating缺少此语句,此警报在过去设置时不会触发,它将在下一个间隔触发,从给定时间开始。
AlarmManager.set和AlarmManager.setInexatRepeating都在调用setImpl,它们得到的触发时间作为参数传递(在Android 7.1.2源中检查)。-->如果triggertime是过去的,那么这两种方法没有区别。