我有以下代码,它只运行一个警报管理器:
public void runAlarm(){
Intent intent = new Intent(context, MyReceiver.class);
intent.setAction(ACTION_TIMEOUT);
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
setTimeOutAlarm(TIMEOUT_MINUTES,alarmIntent);
AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmMgr.setExact(AlarmManager.RTC,
Calendar.getInstance().getTimeInMillis() + 3*60*1000, alarmIntent);
}
它工作正常。我的问题是关于未决 Intent 标志:PendingIntent.FLAG_CANCEL_CURRENT
如果我运行这个方法两次,它真的会取消 alarmManager 中已经存在的其他未决 Intent 吗?它怎么知道它不取消它?我只是想确保我不会通过使用此标志造成任何泄漏。我的 Intent 是我可以多次运行这段代码,它会继续取消之前已经发送到 alarmManager 实例的 pendingIntent。
但每次我运行此代码时,当我使用此 adb 命令检查时,警报计数会增加一个:
adb shell dumpsys alarm | grep com.your.package
看来 alarmManager 可能没有被取消。
最佳答案
我相信你不需要取消旧闹钟..只需更新它即可。
我想你可以使用:PendingIntent.FLAG_UPDATE_CURRENT
请做一些测试,让我知道它是否有效。
关于Android - PendingIntent.FLAG_CANCEL_CURRENT - 它真的取消了 alarmManager 之前未决的 Intent 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35726503/