我只是在看如何取消闹钟,我遇到了这两种方法。应该在哪种情况下使用哪一个?为什么?他们俩都一样吗?
我目前正在这样做:
Intent alarmIntent = new Intent(ChangeAlarmActivity.this, AlarmReceiver.class);
PendingIntent pendingAlarmIntent = PendingIntent.getBroadcast(ChangeAlarmActivity.this, (int)alarm.getID(),
alarmIntent, 0);
pendingAlarmIntent.cancel();
下面的内容有何不同?
Intent alarmIntent = new Intent(ChangeAlarmActivity.this, AlarmReceiver.class);
PendingIntent pendingAlarmIntent = PendingIntent.getBroadcast(ChangeAlarmActivity.this, (int)alarm.getID(),
alarmIntent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingAlarmIntent);
答案 0 :(得分:1)
他们俩都一样吗?
没有
如果您要取消闹钟,请拨打cancel()
上的AlarmManager
。
cancel()
上的{p> PendingIntent
可能会产生相同的效果 - 无论您的警报事件应该触发什么都不再发生。但是,您假设AlarmManager
将检测到这一点并清理它的一面,这是不能保证的。特别是对于_WAKEUP
警报,这可能导致设备被无故唤醒,浪费电池寿命。
在什么情况下应该使用哪一个?为什么?
我确信cancel()
上的PendingIntent
有用例。我不能说出任何具体的,因为我从未见过它。通常当您使用PendingIntent
时,任何“取消”语义都在PendingIntent
的使用上(例如,cancel()
警报通过{{1} ,AlarmManager
通过cancel()
发送通知,而不是NotificationManager
本身。
PendingIntent
cancel()
的一个地方因此会在某个地方传递PendingIntent
并且没有“取消”来还原,或者您明确希望使用PendingIntent
作为还原机制。例如,如果您要创建某种插件机制,并且该插件会向主机应用发送cancel()
,则该插件可能会使用PendingIntent
来表示“停止使用该cancel()
”,主机应用程序在下次尝试PendingIntent
send()
时会发现并获得异常。就个人而言,我不是这方面的忠实粉丝 - 在PendingIntent
行中,如果主机应用无法正确处理这种情况,您不知道主机应用可以使用哪些资源。但是,如果使用得当,它肯定可以工作。
下面的内容有何不同?
我建议你使用“下面”一个。