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

时间:2015-01-06 20:05:48

标签: android scheduled-tasks alarmmanager scheduler

我正在尝试创建一个重复的警报管理器调用,我发现对于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及以下工作正如预期的那样。

是否有任何相关的区别?我错过了什么?

提前致谢!

1 个答案:

答案 0 :(得分:2)

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

  

使用适当的时钟(取决于警报类型),警报首先应该以毫秒为单位的时间。这是不准确的:在此时间之前警报不会触发,但在第一次调用警报之前可能会有几乎整个警报间隔的延迟。

IOW,这似乎按预期工作。