我试图从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?
我试图从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?
这并非必须做的,但这取决于你的使用方式。
PendingIntent 本身只是一个由系统维护的令牌引用,描述用于检索它的原始数据。这意味着,即使所属应用程序的进程被杀死,其他已获得该 PendingIntent 的进程仍然可以使用它。如果创建应用程序稍后重新检索相同类型的 PendingIntent(相同的操作、相同的 Intent 操作、数据、类别和组件以及相同的标志),则它将接收到代表相同令牌的 PendingIntent,如果该令牌仍然有效,则可以调用 cancel() 来删除它。
如果您只需要在任何您使用的 Intent 中同时激活一个 PendingIntent,则可以使用标志 FLAG_CANCEL_CURRENT 或 FLAG_UPDATE_CURRENT,来取消或修改与您提供的 Intent 关联的当前 PendingIntent。
PendingIntent.cancel()
来测试我的 AlarmManager 处理程序类。参见链接 https://dev59.com/mm455IYBdhLWcg3wD_6Z#9575569 。但是,适当调用PendingIntent.cancel()
并进行测试太麻烦了。所以我决定停止。 - tomohiko sato