Дублировать намерения после обновления приложения. Сохраняются ли тревоги?

У меня есть ошибка, когда я получаю повторяющиеся намерения после обновления. Изменение, которое я сделал, состояло в том, чтобы начать прослушивание MY_PACKAGE_REPLACED и перерегистрировать сигнал ниже, потому что я предположил, что тревоги были убиты, когда приложение было обновлено. Тем не менее, я действительно получаю дубликаты трансляции «TriggerPulse», определенные в приведенном ниже коде.

Код ниже – это единственный код, который устанавливает будильник. Его, однако, вызывают из нескольких мест, но, насколько я могу собрать из документов, этот код должен быть идемпотентным (IntentRequestCodes.PULSE_SERVICE – статическое целое, установленное в 1). Верно ли мне считать, что этот код идемпотент?

final Context applicationContext = context.getApplicationContext(); Intent intent = new Intent("TriggerPulse"); final int flags = 0; PendingIntent pendingIntent = PendingIntent.getBroadcast(applicationContext, IntentRequestCodes.PULSE_SERVICE, intent, flags); AlarmManager alarmMgr = (AlarmManager)applicationContext.getSystemService(Context.ALARM_SERVICE); final int triggerAtMilliseconds = 0; // run first time immediately alarmMgr.setInexactRepeating( AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtMilliseconds, AlarmManager.INTERVAL_HALF_HOUR, pendingIntent 

Если он идемпотент при нормальных обстоятельствах, означает ли это, что ожидающее действие, которое обновляемое приложение создает, просто не считается совпадением с ожидающим событием, создаваемым старым устаревшим приложением, в результате чего переадресация будильника в любом случае? Если это так, я могу легко решить проблему, просто не создавая тревогу на MY_PACKAGE_REPLACED. Тем не менее, несколько ресурсов там предлагают перерегистрацию этих событий на этом событии, что приводит к тому, что в какой-то момент это может произойти в Android. Если да, есть ли версия Android для Android, где это поведение было изменено?

    Попробуйте отменить предыдущий аварийный сигнал перед добавлением его снова, поэтому, даже если он был добавлен раньше, проблем не возникнет.

      PendingIntent alarmIntent = PendingIntent.getBroadcast(CONTEXT, MY_ID, MY_INTENT, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager alarmMgr = (AlarmManager) CONTEXT.getSystemService(Context.ALARM_SERVICE); alarmMgr.cancel(alarmIntent);