我试图从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?
答案 0 :(得分:1)
永远不要将FLAG_CANCEL_CURRENT与您在设置闹钟时使用的PendingIntents一起使用。如果你想在不同的时间重新安排闹钟,你根本不需要任何旗帜;只需创建一个标志为零的重复PendingIntent,然后使用它来设置()一个警报:这将隐式取消现有警报,然后将其设置为新指定的时间。但是,如果您在创建新的PendingIntent时使用了FLAG_CANCEL_CURRENT,则会破坏警报管理器识别它的相同"的能力。作为现在被取消的PendingIntent,你最终会挂着旧的,无法送达,占用内存和CPU。我已经看到有这个错误的应用程序在系统中存在数百个陈旧的警报,足以引起明显的性能和内存使用率。
如果您只想更改附加内容而不实际重新安排现有警报,那就是FLAG_UPDATE_CURRENT。如果您想重新安排或取消现有的闹钟,请不要使用任何标志。
答案 1 :(得分:0)
没有必要这样做。但这对你的使用很重要。
PendingIntent本身只是对由其维护的令牌的引用 系统描述用于检索它的原始数据。这个 意味着,即使它拥有的应用程序的进程被杀死了 PendingIntent本身将继续可用于其他进程 得到它。如果创建应用程序稍后重新检索相同的内容 一种PendingIntent(相同的操作,相同的Intent动作,数据, 它会收到一个类别和组件,以及相同的标志 PendingIntent表示相同的标记,如果它仍然有效,和 因此可以调用cancel()来删除它。
如果您一次只需要一个PendingIntent激活您将使用的任何Intent,那么您也可以使用标志public function import($file){
Artisan::call('lang:import',[$file]) ;
return Redirect::back();
}
或axios.get('/user?ID=12345')
.then(function (response) {
console.log(response);
})
.catch(function (response) {
console.log(response);
});
取消或修改当前PendingIntent关联的任何内容与你提供的意图。