16

我的应用程序在用户交互时设置了重复警报,它可能会更改使用警报管理器为广播设置的间隔时间。
额外的方式并不多。
在这种情况下更新或取消标志更好吗?

谢谢

4

2 回答 2

28

切勿将 FLAG_CANCEL_CURRENT 与设置警报时使用的 PendingIntent 一起使用。如果您想将警报重新安排在不同的时间,则根本不需要任何标志;只需创建一个带有零标志的重复 PendingIntent,然后使用它来设置()警报:这将隐式取消现有警报,然后将其设置为新指定的时间。但是,如果您在创建新的 PendingIntent 时使用了 FLAG_CANCEL_CURRENT,它会破坏警报管理器识别它与现在已取消的 PendingIntent“相同”的能力,并且您最终会发现旧的挂起、无法交付、占用内存和 CPU。我已经看到有这个错误的应用程序在系统中积累了数百个过时的警报,足以对性能和内存使用造成显着影响。

如果您只想更改附加内容而不实际重新安排现有警报,这就是 FLAG_UPDATE_CURRENT 的用途。如果您想重新安排,请不要使用任何标志。

于 2016-10-07T22:58:10.310 回答
15

如果您不使用附加功能,则不必指定任何这些标志。他们只改变系统如何处理额外的PendingIntent:替换当前匹配中的那些(由系统缓存PendingIntent)或取消它并创建一个新的。有关详细信息,请参阅文档:http: //developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT

于 2012-12-26T06:10:00.387 回答