我正在为AndroidLollipop
和KitKat
设备开发一个应用程序。应用程序需要在每个预定义的时间间隔内调用 API(基于从服务器接收的时间间隔)。我正在使用AlarmManager
类来做到这一点。 但问题是它一直工作到某个时间然后停止。
例如,如果我设置为在上午 08:00 以 30 分钟的间隔启动闹钟,它会一直工作到 11:00AM (aprx),然后闹钟不会触发。
如果我设置一个很长的间隔(例如:从当前时间算起 8 小时,仍然会发生同样的问题,甚至一次都没有重新出现)
法典
public void setRepeatedAlarm(Context context, int requestCode, long next, long interval, Intent intent) {
PendingIntent sender = PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, next, interval, sender);
}
函数调用
AlarmHandleManager.get().setRepeatedAlarm(this, Constants.SchedulerRequestCodes.UPLOAD_LOG, date.getTime(), AlarmManager.INTERVAL_DAY, intent);
让我知道是否有人可以找出问题。 在Google错误跟踪器中看到棒棒糖中报告的错误,如果是这种情况,请告诉我是否有任何替代解决方案。
我不认为这是一个错误,因为它已经在官方文档中提到过
注意:从 API 19 开始,所有重复警报都是不精确的。由于此方法自 API 3 起就已可用,因此您的应用程序可以安全地调用它,并确保它将在当前和旧版本的 Android 上获得类似的行为。
注意:从 API 19 开始,所有重复警报都是不精确的。如果您的应用程序需要精确的交付时间,那么它必须使用一次性精确警报,每次都如上所述重新安排。目标 SdkVersion 低于 API 19 的旧版应用程序将继续将其所有警报(包括重复警报)视为精确警报。
注意:从 API 19 开始 (Build.VERSION_CODES.KITKAT)警报传递不准确:操作系统将转移警报,以最大程度地减少唤醒和电池使用。有新的 API 来支持需要严格交付保证的应用程序;参见setWindow(int, long, long, android.app.PendingIntent)和setExact(int, long, android.app.PendingIntent)。目标 SdkVersion 低于 API 19 的应用程序将继续看到之前的行为,即所有警报都完全在请求时交付。