Выбор ответа Senior Жизненный цикл Activity и Fragment обновлено
Почему во фрагменте нужен viewLifecycleOwner
Вопрос
Во фрагменте подписка на LiveData сделана в onViewCreated через liveData.observe(this) { }. Что пойдёт не так?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: После возврата из back stack будет второй наблюдатель, а старый держит view. Владелец this это фрагмент, а он живёт дольше view.
Варианты ответа
- Ничего: подписка на
thisснимется автоматически вonDestroyView - Подписка не сработает:
thisещё не в состоянииSTARTEDвonViewCreated - Приложение упадёт с
IllegalStateExceptionпри первом изменении данных - После возврата из back stack будет второй наблюдатель, а старый держит viewправильный ответ
Разбор
Владелец this это фрагмент, а он живёт дольше view. При возврате из back stack onViewCreated вызывается снова, и добавляется ещё один наблюдатель, тогда как старый не удалён и работает со старой view: дубли обработки и утечка. С viewLifecycleOwner подписка снимается в onDestroyView. Сразу ничего не падает, поэтому ошибка коварная.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Жизненный цикл Activity и Fragment»
- Порядок колбэков при переходе между Activity
- TransactionTooLargeException и Bundle
- Колбэки Activity
- Состояния Lifecycle
- Что переживает поворот и смерть процесса
- Жизненный цикл фрагмента и его view
- Гарантирован ли onDestroy
- Почему onPause должен быть быстрым