2012-12-25 7 views
6

Moja aplikacja ustawia powtarzający się alarm podczas interakcji użytkownika, może to zmienić czas ustawiony dla transmisji z Menedżerem alarmów.
Nie ma zbyt wielu dodatków.
Czy w takim przypadku flaga aktualizacji lub anulowania jest lepsza?FLAG_CANCEL_CURRENT lub FLAG_UPDATE_CURRENT

Dzięki

+0

Co oznacza "Nie ma zbyt wielu dodatków"? Czy korzystasz z dodatków, czy nie? –

+0

Nie używam dodatków .. – Dory

+0

Zrób coś, co Samsung Lollipop ma problem, gdy używasz FLAG_CANCEL_CURRENT. Odnosi się do http://stackoverflow.com/questions/29344971/java-lang-securityexception-too-many-alarmy-500-registered-od-pid-10790-u – Elye

Odpowiedz

11

Jeśli nie używasz dodatków, nie trzeba określać każdy z tych flag. Zmieniają tylko sposób, w jaki systemy radzą sobie z dodatkami z PendingIntent: zamień te z bieżącego dopasowania (buforowane przez system PendingIntent) lub anuluj i utwórz nowy. Zapoznaj się z dokumentacją do szczegółów: http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT

+0

OK, mam to ... Dziękuję ..! – Dory

+0

Ponieważ nie potrzebuje ANULUJ, należy przejść do opcji 'FLAG_UPDATE_CURRENT' - w przeciwnym razie powstanie niepotrzebny narzut związany z tworzeniem nowego obiektu. –

+0

Ponadto użycie polecenia CANCEL może spowodować "PendingIntent.CanceledException" –

6

Nigdy użytkowania FLAG_CANCEL_CURRENT z PendingIntents których używasz podczas ustawiania alarmów. Jeśli chcesz zmienić harmonogram alarmu na inny czas, w ogóle nie potrzebujesz żadnej flagi; wystarczy utworzyć duplikat PendingIntent z flagami zerowymi, a następnie użyć go do ustawienia() alarmu: spowoduje to niejawne anulowanie istniejącego alarmu, a następnie ustawienie go na nowo określony czas. Jeśli jednak użyłeś FLAG_CANCEL_CURRENT podczas tworzenia nowego PendingIntent, to łamie on zdolność Menedżera Alarmów do rozpoznania, że ​​jest "taki sam" jak anulowany w toku PendingIntent, i kończysz na tym, że stary, który się kręci, nie można dostarczyć, zabierając pamięć i procesor. Widziałem aplikacje z tym błędem, które dosłownie setki nieaktualnych alarmów w systemie, wystarczy, aby być zauważalną wydajność i wykorzystanie pamięci.

Jeśli chcesz zmienić dodatki bez zmiany harmonogramu istniejącego alarmu, właśnie do tego służy funkcja FLAG_UPDATE_CURRENT. Jeśli chcesz zmienić harmonogram, nie używaj żadnych flag.