AlarmManager.setRepeating是幂等的吗?

时间:2010-04-10 10:01:00

标签: android alarmmanager

在我的Android应用程序中,我正在设置一个警报,我想重复发生,因此使用AlarmManager.setRepeating()。

我不想跟踪警报是否自己设置(听起来像是一个在某些时候容易出现故障的坏主意),并且似乎没有API支持来检查是否已经设置了特定的警报对于给定的意图。

因此,每次我的应用程序激活时,我都会悲观地重置警报:

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

问题:调用setRepeating()是幂等的,即我是否需要显式取消()任何先前的警报,或者我可以安全地调用setRepeating()并完成它吗?

1 个答案:

答案 0 :(得分:3)

API documentation州:

  

如果已经安排了警报   对于同一个IntentSender,它会   首先被取消。

我知道这并不完全清楚,但他们所说的是AlarmManager会检查您传递给PendingIntent的{​​{1}}以及是否已经安排了相同的setRepeating() { {1}}然后在安排新警报之前取消该警报。因此,只要您使用的PendingIntent未更改PendingIntent

,您就不需要取消任何先前的警报

来自PendingIntent API documentation

(oldPendingIntent.equals(newPendingIntent) == true)