/ / Dynamic Broadcast Empfänger in Fragment - Android, Broadcast Receiver, Android-Fragmente

Dynamic Broadcast Empfänger in Fragment - Android, Broadcast Receiver, Android-Fragmente

Ist es möglich, einen Broadcast-Empfänger dynamisch in einem Fragment zu registrieren, um auf Änderungen des Verbindungsstatus zu warten? Wenn das so ist, wie? Wenn nicht, was sind einige Problemumgehungen für Fragmente?

BEARBEITEN: Um einen BroadcastReceiver zu registrieren, benötigen Sie einen Kontext. Da Fragmente in Aktivitäten leben, ist der beste Weg, um einen Kontext zu erhalten, einfach getActivity () zu verwenden. Wie gnosilva unten erklärt, gibt es jedoch bestimmte Sonderfälle, auf die man achten sollte.

Antworten:

30 für die Antwort № 1

user853583 Vorschlag ist ein guter, aber wenn Sie Zugriff auf einen Kontext in einem Fragment benötigen, sollten Sie verwenden getActivity().getApplicationContext()

Sie sollten es vermeiden, eine Aktivität als Kontext zu übergebenwann immer es möglich ist, da dies zu Speicherlecks führen kann - einige Objekte werden diese Aktivität beibehalten, nachdem ihr onDestroy () aufgerufen wurde und es wird kein Müll gesammelt.

Allerdings gibt es Fälle, in denen Sie eine Aktivität als Kontext übergeben müssen - z. B. für Listenadapter

Zwei weitere Dinge jedoch:

  • weil ein Fragment manchmal angehängt und von einer Aktivität abgelöst wird getActivity() gibt null zurück - Sie können es innerhalb bestimmter Lebenszyklusmethoden sicher aufrufen, wenn Sie wissen, dass eine Aktivität aktiv ist, zB: onResume()

  • Wenn Ihr Fragment seine Instanz nicht behält, d. h. bei einer Orientierungsänderung zerstört wird, heben Sie die Registrierung Ihres Empfängers in Ihrem Fragment auf, z. B. im Inneren onPause() oder onDestroy()


3 für die Antwort № 2

Soweit ich sehen kann, gibt es keine Möglichkeit, einen BroadcastReceiver in einem Fragment zu registrieren. Wozu brauchst du diesen Rundfunkempfänger? Eine nette Lösung ist die erwähnte Hier


1 für die Antwort № 3

Sie können einen Rundfunkempfänger wie folgt registrieren: getActivity (). registerReceiver (...