取消并重新启动警报不按预期工作

时间:2014-07-10 11:07:01

标签: android commonsware-cwac

我有一个WakefulIntentService,它基本上会ping服务器,以固定的间隔检查一些数据。

WakefulIntentService.scheduleAlarms(new PingWakefulListener(), this, false);

如果数据可用,我取消警报

WakefulIntentService.cancelAlarms(getApplicationContext());

处理数据。

处理完成后,我重新安排闹钟

WakefulIntentService.scheduleAlarms(new PingWakefulListener(), AcceptOrder.this, false);

我观察到的是,当force(第三个参数)为false时,警报不会再次安排。因此,服务器不再被ping。

但是,如果我将force设置为true,则会同时运行两个服务。

安排和取消警报的正确方法是什么?

我发现,上次闹铃后经过的时间少于getMaxAge。所以警报没有再次安排。但是,取消警报应该已经清除了。

1 个答案:

答案 0 :(得分:1)

实际上,cancelAlarms()似乎只删除AlarmManager事件而不更新SharedPreferences。那是bug,我将在本周末修复它。

话虽如此,鉴于Android 4.4+上新的不精确scheduleAlarms()行为,我对AlarmManager感到有些紧张。确保getMaxAge()返回足够大的值以考虑不精确性。