Localbroadcastmanager ist veraltet, verwenden Sie stattdessen Implementierungen des Observable-Musters.
androidx.localbroadcastmanager
ist in der Version veraltet 1.1.0
Grund
LocalBroadcastManager
ist ein anwendungsweiter Ereignisbus und umfasst Schichtverletzungen in Ihrer Anwendung; jede Komponente kann auf Ereignisse von jeder anderen Komponente hören. Es erbt unnötige Anwendungsfallbeschränkungen des Systems BroadcastManager; Entwickler müssen Intent verwenden, auch wenn Objekte nur in einem Prozess leben und diesen nie verlassen. Aus demselben Grund folgt er nicht den Funktionen von BroadcastManager.
Dies alles führt zu einer verwirrenden Erfahrung für Entwickler.
Ersatz
Sie können die Verwendung von LocalBroadcastManager
mit anderen Implementierungen des beobachtbaren Musters. Je nach Anwendungsfall können geeignete Optionen sein LiveData
oder reaktive Ströme.
Vorteil von LiveData
Sie können eine LiveData
Objekt, das das Singleton-Muster verwendet, um Systemdienste so zu verpacken, dass sie in Ihrer Anwendung gemeinsam genutzt werden können. Die LiveData
Objekt verbindet sich einmal mit dem Systemdienst, und dann kann jeder Beobachter, der die Ressource benötigt, einfach die LiveData
Objekt.
public class MyFragment extends Fragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
LiveData<BigDecimal> myPriceListener = ...;
myPriceListener.observe(this, price -> {
// Update the UI.
});
}
}
Le site observe()
Methode übergibt das Fragment, das eine Instanz von LifecycleOwner
als erstes Argument. Dies bedeutet, dass dieser Beobachter an den Lifecycle
Objekt, das mit dem Eigentümer verbunden ist, bedeutet:
-
Wenn sich das Lifecycle-Objekt nicht in einem aktiven Zustand befindet, dann wird der Beobachter nicht aufgerufen, selbst wenn sich der Wert ändert.
-
Nachdem das Lifecycle-Objekt zerstört wurde, ist der Beobachter automatisch entfernt
Die Tatsache, dass LiveData
Die Tatsache, dass Objekte lebenszyklusorientiert sind, bedeutet, dass Sie sie für mehrere Aktivitäten, Fragmente und Dienste freigeben können.
0 Stimmen
Waqas, haben Sie den Empfänger im Verzeichnis registriert? Wenn ja, lassen Sie mich bitte wissen, wie?
2 Stimmen
Ich glaube nicht, dass Sie einen Empfänger für solche Sendungen im Manifest registrieren müssen, denn wenn Sie das tun, wird dieser Empfänger auch globale Sendungen empfangen.
3 Stimmen
Wahr. Das bedeutet, dass ich den Code wie in der folgenden Antwort beschrieben eingeben muss;
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("custom-event-name"));
2 Stimmen
LocalBroadcastManager
wurde veraltet. Ich ersetzte meine mit der EventBus-Bibliothek, die viel schöner ist, imo.