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

时间:2016-03-01 15:11:39

标签: 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);

}

工作正常。我的问题是关于待处理的意图标记: PendingIntent.FLAG_CANCEL_CURRENT

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

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

adb shell dumpsys alarm | grep com.your.package

所以似乎alarmManager也没有被取消。

1 个答案:

答案 0 :(得分:3)

我相信你不需要取消旧警报......但只需更新它。

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

请进行一些测试,如果有效,请告诉我。