AlarmManager setInexactRepeating 在 Android 4.1.2 中不起作用,在 Android 4.3 及更高版本中起作用

AlarmManager setInexactRepeating not working in Android 4.1.2, works on Android 4.3 and Above

我正在尝试创建一个重复的警报管理器调用,我发现对于 Android 4.1、4.2,它不会在第一次被触发,我需要等待时间间隔才能看到进程正常工作:

public void startScheduler() {
    AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);

    alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() + 100, // now
            AlarmManager.INTERVAL_FIFTEEN_MINUTES, // Interval
            getSchedulerPendingIntent());

}

这仅在达到 AlarmManager.INTERVAL_FIFTEEN_MINUTES 而不是 "triggerAtMillis" 参数时有效。问题是这适用于 Android 4.4 和 Android 5.0.

如果我用 setRepeating 更改 setInexactRepeating,它在 Android 4.1 和 4.2 上完美运行,所以:

public void startScheduler() {
    AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);

    alarm.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() + 100, // now
            AlarmManager.INTERVAL_FIFTEEN_MINUTES, // Interval
            getSchedulerPendingIntent());

}

完美适用于 Android 4.1、4.2、4.3、4.4 和 5.0。唯一的缺点是,对于 Android Api 19 及以上,它将作为一个不精确的重复工作,而对于 android API 19 及以下,它将按预期工作。

它有什么相关的区别吗?我错过了什么?

提前致谢!

引用the documentation for setInexactRepeating(),特别是triggerAtMillis参数:

time in milliseconds that the alarm should first go off, using the appropriate clock (depending on the alarm type). This is inexact: the alarm will not fire before this time, but there may be a delay of almost an entire alarm interval before the first invocation of the alarm.

哇,这似乎按预期工作。