【发布时间】:2012-06-02 20:26:34
【问题描述】:
我已经搜索了 3 天,但在其他任何地方都没有找到解决方案或类似的问题/问题。这是交易:
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 小时前它以 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 天? -
我添加了日志文件,发现可能旧的 PendingIntent 仍在运行。
-
我也遇到了同样的问题,请问您有解决办法吗?
标签: android alarmmanager android-pendingintent