代码之家  ›  专栏  ›  技术社区  ›  tardate

AlarmManager.SetRepeating是等幂的吗?

  •  2
  • tardate  · 技术社区  · 15 年前

    在我的android应用程序中,我设置了一个要重复出现的警报,因此使用了alarmmanager.setrepeating()。

    我不想跟踪报警是否是自己设置的(听起来是个坏主意,在某个时刻很容易失败),而且似乎没有api支持来检查特定的报警是否已经为给定的目的设置。

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

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

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

    1 回复  |  直到 15 年前
        1
  •  3
  •   Mark B    15 年前

    这个 API documentation 国家:

    如果已经安排了警报 出于同样的目的 先被取消。

    我知道这还不完全清楚,但他们说的是 AlarmManager 将检查 PendingIntent 你传递给 setRepeating() 如果已经有一个与 处理意图 然后,在新的警报计划之前,该警报将被取消。所以你不需要取消任何先前的警报只要你正在使用的悬挂物没有改变 (oldPendingIntent.equals(newPendingIntent) == true)

    PendingIntent API documentation :

    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.