我有一个功能,我设置 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个额外的电话。
答案 0 :(得分:0)
int RQS=1;
//RQS- request id for starting the alram ,get the same request and cancel
// starting the alarm
intent = new Intent(getBaseContext(), Receiver.class);
pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS,
intent, PendingIntent.FLAG_CANCEL_CURRENT);
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),
pendingIntent);
//cancelling the request
alarmManager.cancel(PendingIntent.getBroadcast(getBaseContext(), RQS, intent,
PendingIntent.FLAG_UPDATE_CURRENT));