我有一个功能,我设置了一个15 分钟的重复警报来启动我的服务,该服务调用一个 web 服务,处理结果并关闭。简化:
public static void setAlarm(Context cx) {
try{
//My service is running, no need to reset the alarm
if (isServiceRunning())
return;
Intent intent = new Intent(cx, ResultService.class);
PendingIntent sender = PendingIntent.getService(cx, 0, intent, PendingIntent.FLAG_NO_CREATE);
//My pending intent exists, no need to reset the alarm
if (sender!=null)
return;
sender = PendingIntent.getService(cx, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = (AlarmManager) cx.getSystemService(cx.ALARM_SERVICE);
//Cancel any previous alarms????
am.cancel(sender);
am.setRepeating(AlarmManager.RTC_WAKEUP, firstRun, interval, sender);
}catch (Exception e){
}
}
这由侦听以下事件的 BroadcastReceiver 调用
ACTION_SCREEN_ON
ACTION_BOOT_COMPLETED
CONNECTIVITY_ACTION
通过
setAlarm(context.getApplicationContext());
它似乎有效,但是我开始在随机设备上看到每秒对我的网络服务的多次调用。
我尝试在调试时让它发生,但没有成功。
我在这里做错了什么?
更新
我跑了
adb shell dumpsys alarm > dump.txt
检查警报锁,我看到每次警报管理器执行我的 PendingIntent 时唤醒/警报的数量都会增加:
com.x
279ms running, 22 wakeups
22 alarms: flg=0x4 cmp=com.x/.service.ResultService
这有什么意义吗?
更新 2
我跟踪了其中一个有问题的设备。
它在一天中的大部分时间都应该调用 Web 服务,然后在昨晚 19:53 突然我在 6 秒内收到来自设备的 330 个额外调用。
之后它运行良好,直到今天早上 06:50 时我收到了 282 个额外的电话,而在 06:55 我又收到了 130 个额外的电话。