Выбор ответа Senior Делегаты обновлено

by lazy и view во фрагменте

Вопрос

Почему private val adapter by lazy { Adapter(binding.root.context) } во фрагменте может быть проблемой?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Фрагмент переживает свою view, и lazy удержит старую view. Время жизни фрагмента дольше времени жизни его view: при уходе в back stack view уничтожается, а фрагмент остаётся.

Варианты ответа

  1. Фрагмент переживает свою view, и lazy удержит старую viewправильный ответ
  2. lazy нельзя использовать во фрагментах, только в Activity
  3. Адаптер создастся дважды: при attach и при создании view
  4. lazy по умолчанию вычисляет значение в фоновом потоке

Разбор

Время жизни фрагмента дольше времени жизни его view: при уходе в back stack view уничтожается, а фрагмент остаётся. Значение lazy вычисляется один раз и живёт столько же, сколько фрагмент, поэтому держит ссылки на старую view или её контекст, и после возврата работает со старой иерархией. Правильно создавать такие объекты в onViewCreated и обнулять в onDestroyView. Двойного создания и фоновых потоков у lazy нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.