Android - PendingIntent.FLAG_CANCEL_CURRENT - 它真的取消alarmManager之前的待处理意图吗?

j2e*_*nue 5 android alarmmanager android-intent 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);

}
Run Code Online (Sandbox Code Playgroud)

效果很好。我的问题是关于待定意图标志:PendingIntent.FLAG_CANCEL_CURRENT

如果我运行这个方法两次,它真的会取消alarmManager中已经存在的其他待处理意图吗?它怎么知道不取消它?我只是想确保我不会通过使用这个标志造成任何泄漏。我的意图是,我可以多次运行此代码,并且它将继续取消已发送到 AlarmManager 实例的先前挂起的 Intent。

但是每次我运行此代码时,当我使用此 adb 命令检查时,警报计数就会增加一:

adb shell dumpsys alarm | grep com.your.package
Run Code Online (Sandbox Code Playgroud)

所以看来alarmManager也许没有被取消。

W0r*_*0le 3

我相信你不需要取消旧的闹钟..只需更新它即可。

我认为你可以使用:PendingIntent.FLAG_UPDATE_CURRENT

请进行一些测试,然后让我知道它是否有效。