【发布时间】:2015-03-04 13:45:21
【问题描述】:
我正在尝试创建一个重复的警报管理器调用,我发现对于 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 及以下版本,则按预期工作。
这有什么相关的区别吗?我错过了什么?
提前致谢!
【问题讨论】:
-
Note: Beginning with API 19 (KITKAT) alarm delivery is inexact: the OS will shift alarms in order to minimize wakeups and battery use.如此处所述:developer.android.com/reference/android/app/AlarmManager.html
标签: android scheduled-tasks alarmmanager scheduler