Propiedades duplicadas después de la actualización de la aplicación. ¿Las alarmas sobreviven?

Tengo un error en el que estoy recibiendo intentos duplicados después de una actualización. El cambio que hice fue comenzar a escuchar el MY_PACKAGE_REPLACED y volver a registrar la alarma de abajo, porque asumí que las alarmas se eliminaron cuando se actualizó la aplicación. Sin embargo, estoy, de hecho, obteniendo duplicados de la emisión "TriggerPulse" definida en el siguiente código.

El código siguiente es el único código que está configurando la alarma. Sin embargo, se está llamando desde múltiples lugares, pero en la medida en que puedo recopilar de documentos, este código debe ser idempotent (IntentRequestCodes.PULSE_SERVICE es un entero estático establecido en 1). ¿Es correcto que asuma que este código es idempotente?

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 

Si es idempotent en circunstancias normales, ¿significa eso que el pendingIntent que está creando la aplicación actualizada simplemente no se considera una coincidencia de la pendingIntent que está creando la antigua aplicación legacy, provocando que la alarma sea re-programada de todos modos? Si esto es así, puedo resolver fácilmente el problema simplemente no volver a crear la alarma en MY_PACKAGE_REPLACED. Sin embargo, los recursos múltiples por ahí sugieren que uno necesita volver a registrar estos en ese evento, lo que lleva a creer que este fue quizás el caso en Android en algún momento. Si es así, ¿hay una versión de corte de Android en la que se cambió este comportamiento?

Trate de cancelar la alarma anterior antes de agregar de nuevo, por lo que incluso si se añadió antes, no habría ningún problema.

  PendingIntent alarmIntent = PendingIntent.getBroadcast(CONTEXT, MY_ID, MY_INTENT, PendingIntent.FLAG_UPDATE_CURRENT); AlarmManager alarmMgr = (AlarmManager) CONTEXT.getSystemService(Context.ALARM_SERVICE); alarmMgr.cancel(alarmIntent); 
  • ¿Por qué mi actividad siempre muestra el mismo conjunto de datos de una notificación de GCM?
  • Widget no actualizado en el reinicio del lanzador
  • Enviar difusión al hacer clic en la notificación
  • Notificación de Android PendienteIntentos adicionales null
  • Android: cómo obtener la ID de PendingIntent para cancelar la función pendingintent
  • Cómo detener AlarmManager
  • La notificación abre actividad, se pulsa el botón de retroceso, se abre la actividad principal?
  • Lectura de un mensaje NDEF desde una etiqueta NFC desde una aplicación de Android
  • Intención con el extra antiguo en onCreate () para singleTask Actividad
  • ¿Es necesario usar FLAG_ACTIVITY_NEW_TASK en la opción PendingIntent de una notificación?
  • ¿Es posible crear múltiples PendingIntents con el mismo requestCode y diferentes extras?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.