2011-04-18 10 views
11

私は、アラームを2回起動するのを避けるために、トラフのフープを跳ねています(まあ、複雑ではありません)。基本的なコードは次のようになります:私は実際には毎回私のアプリが起動し、このコードを実行するかどうアラームを2回起動するとどうなりますか?

AlarmManager mgr=(AlarmManager)getSystemService(Context.ALARM_SERVICE); 
Intent i=new Intent(this, MyService.class); 
PendingIntent pi=PendingIntent.getService(this, 0, i, 0); 
mgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pi); 

は、それは問題でしょうか?私は、これを過大実験として約10回呼び出すと何の悪影響も見ませんが、これが偶然であろうと予想される行動であるかについては何の参考も見つけることができません。

特に期待されない場合は、「間違っている」と感じます。後でAlarmManagerの動作が変更されると、問題が発生する可能性があります。

答えて

13

アラームマネージャのキャンセル方法は、アラームをキャンセルする '類似のインテント'で問題ないので、クラス名が与えられたインテントをプラットフォームが認識していると言えます。したがって、このような保留中のインテントに対してアラームが既に存在することをプラットフォームが認識するため、これを繰り返し呼び出すことは問題ではないはずです。

postは、これと同様のことを話します。

+0

うーん、ありがとう!その質問から、「Pendingintent」が本当に同じであることが分かります(ドキュメントが言うように)。しかし、同じ 'PendingIntent'を使って' setInexactRepeating'を2回呼び出しても、繰り返さないでしょうか? – Nanne

+0

私は参照を見つけることができませんが、少なくとも同じ「PendingIntent」のアラームを開始しても、それ以上トリガーをかけることはありません。私は私がもしそれがすでに設定されているかどうかを調べることにします。そう簡単に。ありがとう – Nanne

+1

'setInexactRepeating'を複数回呼び出すと、アラームタイマーがリセットされる可能性はありますか?インターバルが15分7分経過した場合と同様に、2回目のコールでインターバル時間が0にリセットされますか? – aandis

関連する問題