In Android habe ich einen BroadcastReceiver in meinem onCreate() registriert. Wo sollte ich mich abmelden, damit ich keine Empfänger durchgelassen habe?Wann die Registrierung des in onCreate registrierten Broadcast-Empfängers aufgehoben werden soll?
Antwort
Sie sollten die Registrierung aufheben, wenn Sie keine Broadcasts mehr empfangen wollen oder können.
http://developer.android.com/reference/android/content/BroadcastReceiver.html
„Sie können entweder dynamisch eine Instanz dieser Klasse mit Context.registerReceiver() registrieren oder statisch eine Implementierung durch den Tag in Ihrem AndroidManifest.xml veröffentlichen. Hinweis: Wenn ein Empfänger in Ihrer Aktivität Registrierung. onResume() - Implementierung, sollten Sie die Registrierung in Activity.onPause() aufheben. (Sie erhalten keine Intents, wenn Sie pausiert sind, und das reduziert den unnötigen Systemaufwand.) Heben Sie die Registrierung in Activity.onSaveInstanceState() nicht auf. "
:) Das SDK ist dein bester Freund. Ich würde sagen, tun Sie, was es in der SDK sagt, es sei denn, Sie benötigen den Empfänger unbedingt in der Pause, aber seien Sie vorsichtig. Müssen Sie den Empfänger dynamisch registrieren oder wäre es besser, ihn in die AndroidManifest.xml zu legen? Wenn Sie den Empfänger in das Manifest aufnehmen, müssen Sie sich keine Gedanken darüber machen, ob Sie den Empfänger registrieren oder die Registrierung aufheben.
Bisher habe ich zwei Fälle von dynamischen Rundfunkempfänger erfahren Registrierung:
- Sie die Rundfunkempfänger wollen nur registriert werden, wenn die Aktivität auf foregroung ist, damit meine ich, dass der Benutzer tatsächlich das Sehen ist Layout der aktuellen Aktivität
-> Dann sollte der Rundfunkempfänger in onResume registriert und in onPause nicht registriert sein. Normaler Fall in der offiziellen Dokumentation (http://developer.android.com/reference/android/content/BroadcastReceiver.html).
-> Dann sollte der Rundfunkempfänger in onCreate registriert und in onDestroy nicht registriert sein (bestätigt durch How to unregister BroadcastReceiver). Wenn nicht, wird die onReceive() -Methode nicht aufgerufen, wenn die Anwendung pausiert wird.
Seien Sie vorsichtig, onDestroy wird nicht garantiert aufgerufen (Punkt ausgelöst in Android - When to Register/Unregister Broadcast Receivers created in an activity?), so dass Sie sicherstellen müssen, dass es irgendwann aufgerufen wird (Aktivität beendet), nicht sicher, es ist die beste Vorgehensweise.
Jetzt warum sollte es dynamisch registriert werden?
Wenn es keinen guten Grund für diesen Broadcast-Empfänger gibt, dann sollten Sie ihn wahrscheinlich in der Manifest-Datei mit dem richtigen Intent-Filter registrieren, um nicht mehr durch die Registrierung/Abmeldung gestört zu werden.
Wenn Sie Ihren Broadcast-Empfänger in einer Create-Methode regeisterten, wäre es besser, wenn Sie die Registrierung in onDestroy()
method.it aufheben. Es wird nur eine Override-Methode aufgerufen, wenn Ihre App zerstört wird.
- 1. AppFabric - Etw - Registrierung des Traceproviders konnte nicht aufgehoben werden
- 2. Registrierung des Broadcastempfängers, der über Manifest registriert wurde
- 3. Wann WebResponse.Close() aufgerufen werden soll
- 4. Wann soll super.onPause() aufgerufen werden?
- 5. Wann wird die Speicherfreigabe in Bezug auf statische Variablen aufgehoben?
- 6. Wann @ in einer Rails-Ansicht verwendet werden soll und wann ein Symbol verwendet werden soll?
- 7. Wann Anwendungskontext in Springs verwendet werden soll.
- 8. Wie werden die letzten n Commits aufgehoben?
- 9. Wann soll das NSUrConnection-Objekt freigegeben werden?
- 10. Java - Wann dieses '' 'Schlüsselwort verwendet werden soll
- 11. Wann die Schnittstelle in der Klasse implementiert werden soll und wann eine anonyme Implementierung einer Schnittstelle instanziiert werden soll
- 12. Wann glEnable (GL_FRAMEBUFFER_SRGB) aufgerufen werden soll?
- 13. Wann soll der HTTP-Statuscode gesendet werden?
- 14. Wann soll ein Vektor normalisiert werden?
- 15. Wann ein neues Repository erstellt werden soll?
- 16. Elasticsearch: Wann die Option omit_norms als falsch gesetzt werden soll
- 17. Wann die SQLite-Datenbank geschlossen werden soll (mit FMDB)
- 18. Wie weiß die JVM, wann eine NullPointerException ausgelöst werden soll
- 19. Wann die reine Rekursion und wann die Schleife/Wiederholung verwendet werden soll?
- 20. Wann next() und next() in Node.js verwendet werden soll
- 21. Wann soll NSMutableArray von der Schleife in viewDidLoad freigegeben werden?
- 22. Wann soll in Produktion von SQLite zu MySQL gewechselt werden?
- 23. Wann soll ein Designmuster in den Klassennamen aufgenommen werden?
- 24. Wann soll der Cursor in Android geschlossen werden?
- 25. Wann soll ein neuer Anwendungsschlüssel in Laravel generiert werden?
- 26. Wann soll das Tag @author in PHPdoc aktualisiert werden?
- 27. Wann Code in Dateien/Module aufgeteilt werden soll?
- 28. Mit welchen Operationen werden Einschränkungen aufgehoben?
- 29. Warum und wann die Registrierung von Content-Beobachtern in Android
- 30. Wann isInstanceOf und wann eine Match-Case-Anweisung (in Scala) verwendet werden soll?
Beachten Sie, dass die Aktivität ab Honeycomb erst nach onStop killbar ist. Daher ist es möglich, die Registrierung in onStop (mit dem entsprechenden Register in onStart) anstelle von onPause aufzuheben. – Tom