サービスを開始するために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());
動作しているように見えますが、ランダムなデバイスで1 秒あたりに Web サービスへの複数の呼び出しが見られるようになりました。
デバッグ中にそれを実現しようとしましたが、成功しませんでした。
ここで何が間違っていますか?
アップデート
走った
adb shell dumpsys alarm > dump.txt
アラーム ロックを確認すると、アラーム マネージャーが PendingIntent を実行するたびにウェイクアップ/アラームの数が増加することがわかります。
com.x
279ms running, 22 wakeups
22 alarms: flg=0x4 cmp=com.x/.service.ResultService
それは何か意味がありますか?
更新 2
問題のあるデバイスの 1 つを追跡しました。
1 日のほとんどの時間、Web サービスを呼び出す必要がありますが、昨夜の 19:53 に突然、デバイスから 6 秒間で 330 の余分な呼び出しを受けます。
その後、今朝 06:50 まで問題なく動作し、282 回の追加コールが発生し、06:55 にさらに 130 回の追加コールが発生しました。