0

我有一个功能,我设置了一个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 个额外的电话。

4

1 回答 1

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));
于 2013-08-12T10:30:22.940 回答