Android - PendingIntent.FLAG_CANCEL_CURRENT - 它真的取消了 alarmManager 之前未决的 Intent 吗?

标签 android android-intent alarmmanager android-pendingintent

我有以下代码,它只运行一个警报管理器:

 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/

相关文章:

android - Jetpack Compose 和 Android Room 兼容性

android - 无法使用eclipse为cordova 3.x版本运行android项目

java - 每次应用程序启动时 AlarmManager 都会触发

java - 如何知道闹钟还剩多少时间

android - 无法解析代码中无处引用的支持版本的消息

android - activity.finish() 未停止当前 Activity

Android 注入(inject)系统 Activity Intent

java - 尝试有意共享 mp3,但不包含文件扩展名

android - api 23 拍照无存储权限

android - 如何获取AlarmManager调用的唯一pendingIntent的ID?