Mam błąd, w którym otrzymuję duplikaty zamiarów po aktualizacji. Zmianą, którą wprowadziłem, było rozpoczęcie słuchania MY_PACKAGE_REPLACED i ponowna rejestracja alarmu poniżej, ponieważ zakładałem, że alarmy zostały zabite, gdy aplikacja została zaktualizowana. Jednak faktycznie otrzymuję duplikaty transmisji "TriggerPulse" zdefiniowanej w poniższym kodzie.Powtórz zamiary po aktualizacji aplikacji. Czy alarmy przetrwają?
Poniższy kod jest jedynym kodem ustawiania alarmu. Jest to jednak wywoływane z wielu miejsc, ale o ile mogę zebrać z dokumentów, kod ten powinien być idempotentny (IntentRequestCodes.PULSE_SERVICE jest statyczną liczbą całkowitą ustawioną na 1). Czy to prawda, że zakładam, że ten kod jest idempotentny?
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
Jeśli jest to idempotent w normalnych warunkach, to znaczy w pendingIntent że zaktualizowanej aplikacji jest tworzenie po prostu nie jest uważany za mecz z pendingIntent że stare dziedzictwo aplikacja jest tworzenie, powodując alarm być zresetowany w każdym razie? Jeśli tak, mogę łatwo rozwiązać problem, po prostu nie odtwarzając ponownie alarmu w MY_PACKAGE_REPLACED. Jednak wiele zasobów sugeruje, że trzeba je ponownie zarejestrować na tym wydarzeniu, co może prowadzić do przekonania, że może tak było w przypadku Androida. Jeśli tak, czy istnieje odcięcie wersji Androida, w której to zachowanie zostało zmienione?