我有一个WakefulIntentService,它基本上以一定的固定间隔ping服务器以检查一些数据。
WakefulIntentService.scheduleAlarms(new PingWakefulListener(), this, false);
如果有数据,我取消警报
WakefulIntentService.cancelAlarms(getApplicationContext());
处理数据。
处理完成后,我将重新安排警报的时间
WakefulIntentService.scheduleAlarms(new PingWakefulListener(), AcceptOrder.this, false);
我观察到的是,当force(第三个参数)为false时,不会再次安排警报。因此,服务器不会再次被ping通。
但是,如果设置force
为true
,则两个服务会同时运行。
排定和取消警报的正确方法是什么?
我发现,上次警报后经过的时间少于getMaxAge
。因此,不会再次安排警报。但是,取消警报应该可以清除该问题。
实际上,它看起来cancelAlarms()
只是删除AlarmManager
事件,而不更新SharedPreferences
。那是一个错误,我将在本周末进行修复。
话虽这么说,scheduleAlarms()
鉴于AlarmManager
Android 4.4+上的新的不精确自然行为,我对此有些不安。确保getMaxAge()
返回足够大的值以考虑不精确性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句