我有一个WakefulIntentService,它基本上会ping服务器,以固定的间隔检查一些数据。
WakefulIntentService.scheduleAlarms(new PingWakefulListener(), this, false);
如果数据可用,我取消警报
WakefulIntentService.cancelAlarms(getApplicationContext());
处理数据。
处理完成后,我重新安排闹钟
WakefulIntentService.scheduleAlarms(new PingWakefulListener(), AcceptOrder.this, false);
我观察到的是,当force(第三个参数)为false时,警报不会再次安排。因此,服务器不再被ping。
但是,如果我将force
设置为true
,则会同时运行两个服务。
安排和取消警报的正确方法是什么?
我发现,上次闹铃后经过的时间少于getMaxAge
。所以警报没有再次安排。但是,取消警报应该已经清除了。
答案 0 :(得分:1)
实际上,cancelAlarms()
似乎只删除AlarmManager
事件而不更新SharedPreferences
。那是bug,我将在本周末修复它。
话虽如此,鉴于Android 4.4+上新的不精确scheduleAlarms()
行为,我对AlarmManager
感到有些紧张。确保getMaxAge()
返回足够大的值以考虑不精确性。