这很奇怪,setInexactRepeating方法大约在给定时间而不是精确时间触发的原因是什么?
我需要每天在一个特定的时间触发闹钟,我说过
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
// Set the alarm's trigger time to 8:30 a.m.
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 30);
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);
我在日历上设置了上午8:30的时间,当我将设备时间转移到第二天时,即使在我将设备时间转移到上午8:30之前,闹钟也会立即触发。
这里发生了什么,为什么我不能使用这个api精确触发,如果你们中有人有过这样的经历,你能分享你的经验吗?谢谢!
根据文档(这里)有文本:
如上所述,选择报警类型通常是第一步创建告警。另一个区别是你需要的数据有多精确要闹了。对于大多数应用来说,setInexactRepeating()是正确的选择。当你使用这个方法时,Android会同步多个不精确的重复发出警报并同时发出警报。这减少了耗尽电池。
对于具有严格时间要求的罕见应用程序,例如,闹钟必须在早上8点30分准时响,并且每小时都要整点响thereafter-use setRepeating()。但是您应该避免使用精确的警报如果可能的话。
使用setInexactRepeating(),您不能指定自定义间隔就像使用setRepeating()一样。你必须使用其中一个区间如INTERVAL_FIFTEEN_MINUTES、INTERVAL_DAY等。
我希望它能帮助你。