3日間検索しましたが、解決策や同様の問題/質問が他に見つかりませんでした. 契約は次のとおりです。
1 時間でトリガー -> 正常に動作
2時間で発動→1分23秒で消滅
1日でトリガー -> ~11:00で終了
では、なぜ AlarmManager はこれほど予測不可能で、常に早すぎるのでしょうか? または、私は何を間違っていますか?また、正しく機能する別の方法はありますか?
これは、PendingIntent を AlarmManager に登録する方法です (削除されます)。
AlarmManager alarmManager = (AlarmManager)parent.getSystemService(ALARM_SERVICE);
Intent myIntent = new Intent(parent, UpdateKlasRoostersService.class);
PendingIntent pendingIntent = PendingIntent.getService(parent, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
//Set startdate of PendingIntent so it triggers in 10 minutes
Calendar start = Calendar.getInstance();
start.setTimeInMillis(SystemClock.elapsedRealtime());
start.add(Calendar.MINUTE, 10);
//Set interval of PendingIntent so it triggers every day
Integer interval = 1*24*60*60*1000;
//Cancel any similar instances of this PendingIntent if already scheduled
alarmManager.cancel(pendingIntent);
//Schedule PendingIntent
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, start.getTimeInMillis(), interval, pendingIntent);
//Old way I used to schedule a PendingIntent, didn't seem to work either
//alarmManager.set(AlarmManager.RTC_WAKEUP, start.getTimeInMillis(), pendingIntent);
誰かが解決策を持っていれば素晴らしいでしょう。助けてくれてありがとう!
更新: 2 時間前は 2 時間間隔でトリガーするように機能しましたが、その後は 1:20 時間後にトリガーされました。それは本当に奇妙になっています。ログファイルでトリガーを追跡し、明日ここに投稿します。
更新: PendingIntent は 3 時間ごとに実行されるようにスケジュールされています。ログの 2 行目から、古いスケジュールされた PendingIntent がまだ実行されているようです。
[2012-5-3 2:15:42 519] Updating Klasroosters
[2012-5-3 4:15:15 562] Updating Klasroosters
[2012-5-3 5:15:42 749] Updating Klasroosters
[2012-5-3 8:15:42 754] Updating Klasroosters
[2012-5-3 11:15:42 522] Updating Klasroosters
しかし、新しいものをスケジュールする前に、スケジュールされた PendingIntent をキャンセルしたと確信しています。また、すべての PendingIntent が同じ方法で再作成されるわけではないため、まったく同じである必要があります。そうでない場合、このスレッドの質問はもはや関係ありません。