FLAG_CANCEL_CURRENT或FLAG_UPDATE_CURRENT

时间:2012-12-25 09:30:21

标签: android alarmmanager android-pendingintent

我的应用可能会对用户互动设置重复警报 使用Alarm Manager更改为广播设置的间隔时间 额外的方式并不多。
在这种情况下更新或取消标志更好吗?

由于

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:12)

从不将FLAG_CANCEL_CURRENT与您在设置闹钟时使用的PendingIntents一起使用。如果你想在不同的时间重新安排闹钟,你根本不需要任何旗帜;只需创建一个标志为零的重复PendingIntent,然后使用它来设置()一个警报:这将隐式取消现有警报,然后将其设置为新指定的时间。但是,如果你在创建新的PendingIntent时使用了FLAG_CANCEL_CURRENT,它会破坏警报管理器识别出它与现在取消的PendingIntent“相同”的能力,并且最终会让旧的那个挂起,无法传递,占用内存和CPU。我已经看到有这个错误的应用程序在系统中存在数百个陈旧的警报,足以引起明显的性能和内存使用率。

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