android - 从AlarmManager中删除报警时,我是否也应该取消PendingIntent?

标签 android alarmmanager android-pendingintent

我正在尝试从 AlarmManager 中删除警报。我刚刚调用了 AlarmManager.cancel(),它似乎工作正常。我还应该取消 PendingIntent 吗?为什么?

PendingIntent p; // prepare a pending intent which matches target alarm's intent.
alarmManager.cancel(p);
p.cancel() // should I do that? 

最佳答案

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

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

关于android - 从AlarmManager中删除报警时,我是否也应该取消PendingIntent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37176218/

相关文章:

android - Android 6.0 Doze 模式下的 Alarm Manager 问题

android - PendingIntent.getBroadcast 在奥利奥中不起作用

android - 单击 StatusBar 通知后 Intent 未运行

java - 这个 Activity 已经有一个由窗口装饰提供的操作栏?

Android - 应用程序关闭后,AlarmManager 不工作

android - 多个 Intent ,但广播接收器仅调用一次

Android NotificationListenerService 后台执行限制/Doze

android - 如何获取 whatsapp 或 android 中其他应用程序中使用的联系人

android - 抽屉导航中的 ExpandableListview

java - 如何在 ExpandableListView 中更改 GroupView 背景颜色?