我已经搜索了三天,但没有找到任何解决方案或类似的问题/问题。以下是要处理的问题:
1小时后触发 -> 正常工作
2小时后触发 -> 在1:23触发
1天后触发 -> 在大约11:00触发
因此为什么AlarmManager如此不可预测并且总是太早?或者我做错了什么?是否有其他方法可以使它正确地工作?
以下是我在AlarmManager中注册PendingIntent的方式(精简):
1小时后触发 -> 正常工作
2小时后触发 -> 在1:23触发
1天后触发 -> 在大约11:00触发
因此为什么AlarmManager如此不可预测并且总是太早?或者我做错了什么?是否有其他方法可以使它正确地工作?
以下是我在AlarmManager中注册PendingIntent的方式(精简):
AlarmManager alarmManager = (AlarmManager)parent.getSystemService(ALARM_SERVICE);
Intent myIntent = new Intent(parent, UpdateKlasRoostersService.class);
PendingIntent pendingIntent = PendingIntent.getService(parent, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//Set startdate of PendingIntent so it triggers in 10 minutes
Calendar start = Calendar.getInstance();
start.setTimeInMillis(SystemClock.elapsedRealtime());
start.add(Calendar.MINUTE, 10);
//Set interval of PendingIntent so it triggers every day
Integer interval = 1*24*60*60*1000;
//Cancel any similar instances of this PendingIntent if already scheduled
alarmManager.cancel(pendingIntent);
//Schedule PendingIntent
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, start.getTimeInMillis(), interval, pendingIntent);
//Old way I used to schedule a PendingIntent, didn't seem to work either
//alarmManager.set(AlarmManager.RTC_WAKEUP, start.getTimeInMillis(), pendingIntent);
希望有人能提供解决方案,非常感谢任何帮助!
更新: 两个小时前,使用2小时的间隔触发它是有效的,但之后它在1小时20分钟后触发。这变得非常奇怪。我将通过日志跟踪触发器,并明天在此发布。
更新: PendingIntent 被安排每3小时运行一次。从日志的第二行看来,似乎仍在运行一个旧的预定 PendingIntent:
[2012-5-3 2:15:42 519] Updating Klasroosters
[2012-5-3 4:15:15 562] Updating Klasroosters
[2012-5-3 5:15:42 749] Updating Klasroosters
[2012-5-3 8:15:42 754] Updating Klasroosters
[2012-5-3 11:15:42 522] Updating Klasroosters
但是,我确定在安排新的PendingIntent之前已经取消了预定的PendingIntent。而且每个PendingIntent并不是以相同的方式重新创建的,因此应该完全相同。如果不是这样,那么这个线程的问题就不再相关。
start
以使其向前推进2小时和1天? - Sam