2

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

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

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

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

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

4

1 回答 1

3

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.
于 2010-04-10T18:18:54.547 回答