2011-01-06 2 views

Odpowiedz

0

Należy wyrejestrować go, gdy nie chcesz już odbierać emisji lub nie możesz ich odbierać.

21

http://developer.android.com/reference/android/content/BroadcastReceiver.html

„Można dynamicznie zarejestrować instancję tej klasy z Context.registerReceiver() lub statycznie opublikować implementację przez tag w swojej AndroidManifest.xml. Uwaga: Jeżeli rejestracji odbiornika w swojej działalności. onResume() realizacja, należy wyrejestrować go w Activity.onPause(). (nie otrzymasz zamiary, kiedy zatrzymał się, a to zmniejszyć niepotrzebne obciążenie systemu). nie należy wyrejestrować w Activity.onSaveInstanceState().”

:) SDK to Twój najlepszy przyjaciel. Powiedziałbym, że rób to, co jest napisane w SDK, chyba że absolutnie potrzebujesz odbiornika, gdy jesteś przerywany, ale bądź ostrożny. Czy trzeba dynamicznie zarejestrować słuchawkę lub byłoby wprowadzenie go w AndroidManifest.xml być lepiej? Jeśli umieścisz odbiorcę w manifeście, nie musisz się martwić o rejestrację/wyrejestrowanie go.

+1

zauważyć, że rozpoczynając od plastra miodu, aktywność nie jest dopóki usuwalne OnStop, jest więc możliwe, aby wyrejestrować się OnStop (z odpowiednim rejestrze, onStart) zamiast OnPause. – Tom

4

tej pory doświadczyłem 2 przypadki odbiornik Dynamic transmisji zarejestrowaniem:

  • Chcesz odbiornik transmisji być rejestrowane tylko wtedy, gdy działalność jest foregroung, przez to mam na myśli, że użytkownik jest rzeczywiście widząc układ aktualnej aktywności.

-> Następnie odbiornik powinien zostać zarejestrowany w trybie onResume i niezarejestrowany w onPause. Normalny przypadek podany w oficjalnej dokumentacji (http://developer.android.com/reference/android/content/BroadcastReceiver.html).

  • Chcesz odbiornik transmisji być zarejestrowany aby otrzymać długotrwałe działanie zostało wywołane (najprawdopodobniej usługa), a użytkownik może w każdej chwili przerwać działanie (na przykład użytkownik kliknie przycisk zasilania).

-> Następnie odbiornik radiowy powinien być zarejestrowany w onCreate i niezarejestrowany w onDestroy (potwierdzony przez How to unregister BroadcastReceiver). W przeciwnym razie, gdy aplikacja zostanie wstrzymana, metoda onReceive() nie zostanie wywołana.
Bądź ostrożny, onDestroy nie jest gwarantowana na miano (punkt podniesiony w Android - When to Register/Unregister Broadcast Receivers created in an activity?), więc będziesz musiał upewnić się, że nazywa się w pewnym momencie (zakończył działalność), nie wiedząc, że jest to najlepsza praktyka.

Dlaczego powinien on być dynamicznie rejestrowany?
Jeśli nie ma dobry powód do tego odbiornika transmisji wtedy prawdopodobnie należy zarejestrować go w pliku manifestu z odpowiednim filtrem zamiarem nie przeszkadzają rejestracji/wyrejestrowanie więcej.

1

Podczas ponownego przydzielania odbiornika w trybie tworzenia lepiej byłoby, gdyby wyrejestrować w metodzie onDestroy() method.it to po prostu metoda nadpisywania, która jest wywoływana, gdy aplikacja zostanie zniszczona.