4 подписчика
Почему нельзя писать liveData.observe(this...) во Fragment?
Lifecycle — объект, который отслеживает жизненный цикл (Fragment, Activity....) и передает их в качестве состояния тем, кто на этот жизненный цикл подписался (ViewModel, LiveData...)
LifecycleOwner — интерфейс, который содержит единственный метод — getLifecycle() : Lifecycle
LiveData.observe(...) — может принимать ссылку и на Lifecycle, и на LifecycleOwner
С помощью объекта Lifecycle мы сообщаем LiveData, когда данные должны приходить подписчику, а когда — уже нет
Activity и Fragment реализует интерфейс LifecycleOwner
Получается, что в Activity и Fragment мы спокойно можем просто передавать this в LiveData.observe()?
В Activity можем, а во Fragment — можем, но так делать не стоит
Дело в том, что у Fragment жизненный цикл View и самого фрагмента не жестко связаны:
если фрагмент был убран с экрана (onDetach), но добавлен в backstack, то View может быть уничтожена (onDestroyView), а сам фрагмент — нет
получается, если при подписки на LiveData мы передадим ссылку на фрагмент, а не на viewLifecycleOwner, то возможна ситуация, когда данные придут, а View уже уничтожено — приложение упадет
Около минуты
10 ноября 2022