Android - PendingIntent.FLAG_CANCEL_CURRENT - 它真的取消了 alarmManager 之前未决的意图吗?
Android - PendingIntent.FLAG_CANCEL_CURRENT - does it really cancel alarmManager previous pending intent?
我有以下代码,它只是 运行 一个警报管理器:
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);
}
它工作正常。我的问题是关于未决意图标志:PendingIntent.FLAG_CANCEL_CURRENT
如果我 运行 这个方法两次,它是否真的取消了 alarmManager 中已经存在的其他未决意图?它怎么知道它不取消它?我只是想确保我不会通过使用此标志造成任何泄漏。我的意图是我可以多次 运行 这段代码,它会继续取消之前已经发送到 alarmManager 实例的 pendingIntent。
但是每次我 运行 这个代码时,当我用这个 adb 命令检查时,警报计数会增加一个:
adb shell dumpsys alarm | grep com.your.package
看来 alarmManager 可能没有被取消。
我相信你不需要取消旧闹钟..只需更新它即可。
我想你可以使用:PendingIntent.FLAG_UPDATE_CURRENT
请做一些测试,让我知道它是否有效。
我有以下代码,它只是 运行 一个警报管理器:
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);
}
它工作正常。我的问题是关于未决意图标志:PendingIntent.FLAG_CANCEL_CURRENT
如果我 运行 这个方法两次,它是否真的取消了 alarmManager 中已经存在的其他未决意图?它怎么知道它不取消它?我只是想确保我不会通过使用此标志造成任何泄漏。我的意图是我可以多次 运行 这段代码,它会继续取消之前已经发送到 alarmManager 实例的 pendingIntent。
但是每次我 运行 这个代码时,当我用这个 adb 命令检查时,警报计数会增加一个:
adb shell dumpsys alarm | grep com.your.package
看来 alarmManager 可能没有被取消。
我相信你不需要取消旧闹钟..只需更新它即可。
我想你可以使用:PendingIntent.FLAG_UPDATE_CURRENT
请做一些测试,让我知道它是否有效。