FLAG_CANCEL_CURRENT或FLAG_UPDATE_CURRENT

Dor*_*ory 10 android alarmmanager android-pendingintent

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

谢谢

Nik*_*kov 15

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


cta*_*ate 15

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

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