2

私のAndroidアプリでは、繰り返し発生させたいアラームを設定しているため、AlarmManager.setRepeating()を使用しています。

アラームが自分で設定されているかどうかを追跡したくありません (ある時点で失敗する傾向がある悪い考えのように聞こえます)。また、特定のアラームが特定のアラームに対して既に設定されているかどうかを確認するための API サポートがないようです。意図。

したがって、アプリがアクティブになるたびにアラームを悲観的にリセットしています。

alarmManager.cancel(pendingIntent);
...
alarmManager.setRepeating(..., pendingIntent); 

質問: setRepeating() の呼び出しは冪等ですか? つまり、以前のアラームを明示的に cancel() する必要がありますか? それとも、安全に setRepeating() を呼び出すだけで完了できますか?

4

1 に答える 1

3

API ドキュメントには次のように記載されています。

同じ IntentSender に対してスケジュールされたアラームが既にある場合は、最初にキャンセルされます。

私はそれが完全に明確ではないことを知っていますが、彼らが言っていることは、パスをAlarmManager調べ、同一のアラームがすでにスケジュールされている場合、新しいアラームがスケジュールされる前にそのアラームがキャンセルされるということです。したがって、使用している PendingIntent が変更されていない限り、以前のアラームをキャンセルする必要はありませんPendingIntentsetRepeating()PendingIntent(oldPendingIntent.equals(newPendingIntent) == true)

PendingIntent API ドキュメントから:

equals(Object otherObj)
Comparison operator on two PendingIntent objects, such that true is returned then they both represent the same operation from the same package.
于 2010-04-10T18:18:54.547 に答える