我正在为Android Lollipop
和KitKat
设备开发应用程序。应用程序需要在每个预定义的间隔(基于从服务器接收的间隔)中调用API。我正在使用AlarmManager
类进行此操作。
但是问题是它可以工作到一段时间然后停止。
例如,如果我设置为在08:00 AM以30分钟的间隔启动警报,它将一直工作到11:00 AM(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错误跟踪器中看到了棒棒糖中报告的错误,如果是这种情况,请告诉我是否还有其他解决方案。
答案 0 :(得分:0)
我不认为这是一个错误,因为它已在官方documentation
中提及注意:从API 19开始,所有重复警报都是不精确的。由于此方法自API 3起就可用,因此您的应用程序可以安全地调用它,并确保它在当前版本和较旧版本的Android上都将表现出类似的行为。
注意:从API 19开始,所有重复警报都是不精确的。如果您的应用程序需要精确的交付时间,则它必须使用一次性精确警报,并如上所述每次重新安排。 targetSdkVersion早于API 19的旧版应用程序将继续将其所有警报(包括重复警报)视为精确警报。
注意:从API 19(Build.VERSION_CODES.KITKAT)开始,警报传递是不准确的:操作系统将转移警报,以最大程度地减少唤醒和电池消耗。有一些新的API支持需要严格交付保证的应用程序。请参见setWindow(int,long,long,android.app.PendingIntent)和setExact(int,long,android.app.PendingIntent)。 targetSdkVersion早于API 19的应用程序将继续看到以前的行为,在该行为中,所有警报均在请求时准确地传递。