localbroadcastmanager jest przestarzały, zamiast tego użyj implementacji obserwowalnego wzorca.
androidx.localbroadcastmanager
jest przestarzałe w wersji 1.1.0
Powód
LocalBroadcastManager
jest aplikacyjną szyną zdarzeń i obejmuje naruszenia aplikacji w Twojej aplikacji; dowolny komponent może nasłuchiwać zdarzeń z dowolnego innego komponentu. Dziedziczy niepotrzebne ograniczenia przypadków użycia systemu BroadcastManager; programiści muszą korzystać z Intent, nawet jeśli obiekty działają tylko w jednym procesie i nigdy go nie opuszczają. Z tego samego powodu nie jest zgodny z funkcją BroadcastManager pod względem funkcji.
To wszystko powoduje zamieszanie programistów.
Zastąpienie
Możesz zastąpić użycie LocalBroadcastManager
innymi implementacjami obserwowalnego wzorca. W zależności od przypadku zastosowania odpowiednimi opcjami mogą być LiveData
lub strumienie reaktywne.
Zaleta LiveData
Możesz rozszerzyć LiveData
obiekt za pomocą wzorca singleton, aby zawinąć usługi systemowe, aby można je było udostępnić w aplikacji. Na LiveData
łączy sprzeciw wobec usługi systemowej jednokrotnie, a następnie każdego obserwatora, który potrzebuje zasobu może tylko obserwować LiveData
obiekt.
public class MyFragment extends Fragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
LiveData<BigDecimal> myPriceListener = ...;
myPriceListener.observe(this, price -> {
// Update the UI.
});
}
}
observe()
Sposób przechodzi do fragmentu, który jest przykładem LifecycleOwner
, jak pierwszy argument. Oznacza to, że ten obserwator jest powiązany z Lifecycle
obiektem powiązanym z właścicielem, co oznacza:
Jeśli obiekt Lifecycle nie jest w stanie aktywnym, obserwator nie jest wywoływany, nawet jeśli wartość się zmienia.
Po zniszczeniu obiektu Lifecycle obserwator jest automatycznie usuwany
Fakt, że LiveData
obiekty uwzględniają cykl życia, oznacza, że można je udostępniać między wieloma działaniami, fragmentami i usługami.