Является ли AlarmManager.setRepeating идемпотентом? - PullRequest
2 голосов
/ 10 апреля 2010

В моем приложении для Android я устанавливаю тревогу, которую я хочу повторять, поэтому использую AlarmManager.setRepeating ().

Я не хочу отслеживать, установлен ли будильник самостоятельно(звучит как плохая идея, которая в какой-то момент склонна к сбою), и, похоже, API не поддерживает проверку того, установлен ли конкретный сигнал тревоги для данного намерения.

Следовательно, я пессимистически сбрасываюсигнал тревоги каждый раз, когда мое приложение активируется:

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

Вопрос: вызывает ли setRepeating () идемпотент, т.е. мне нужно явно отменить () любую предыдущую тревогу или я могу безопасно просто вызвать setRepeating () и покончить с этим?

1 Ответ

3 голосов
/ 10 апреля 2010

Документация API гласит:

Если тревога уже запланирована для того же IntentSender, это будет сначала будет отменено.

Я знаю, что это не совсем понятно, но они говорят, что AlarmManager будет проверять PendingIntent, который вы передаете setRepeating(), и если уже запланирован будильник с идентичным PendingIntent, тогда этот сигнал быть отменено до того, как новый запланирован. Таким образом, вам не нужно отменять какие-либо предыдущие сигналы тревоги, пока 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.
...