localbroadcastmanager застарілий, замість цього використовуйте реалізації шаблону, що спостерігається.
androidx.localbroadcastmanager
застаріла у версії 1.1.0
Причина
LocalBroadcastManager
- шина подій на всьому додатку та охоплює порушення рівня шару у вашій програмі; будь-який компонент може слухати події з будь-якого іншого компонента. Він успадковує непотрібні обмеження у випадку використання системи BroadcastManager; розробникам доводиться використовувати наміри, навіть якщо об'єкти живуть лише в одному процесі і ніколи не залишають його. З цієї ж причини він не дотримується функцій BroadcastManager.
Вони додають до заплутаного досвіду розробника.
Заміна
Ви можете замінити використання LocalBroadcastManager
іншими реалізаціями спостережуваного шаблону. Залежно від використання, підходящими варіантами можуть бути LiveData
або реактивні потоки.
Перевага LiveData
Ви можете розширити LiveData
об’єкт, використовуючи однотонний візерунок, щоб обернути системні сервіси, щоб вони могли ділитися у вашій програмі. В LiveData
об'єкті підключається до системної службі один раз, а потім будь-якому спостерігачеві , який потребує ресурс може просто спостерігати за LiveData
об'єкт.
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()
Метод передає фрагмент, який є екземпляром LifecycleOwner
, в якості першого аргументу. Це означає, що цей спостерігач пов'язаний з Lifecycle
об'єктом, пов'язаним з власником, що означає:
Якщо об’єкт життєвого циклу не знаходиться в активному стані, спостерігач не викликається, навіть якщо значення змінюється.
Після знищення об'єкта життєвого циклу спостерігач автоматично видаляється
Той факт, що LiveData
об'єкти усвідомлюють життєвий цикл, означає, що ви можете ділитися ними між різними видами діяльності, фрагментами та службами.