Выбор ответа Senior Делегаты обновлено
by lazy и view во фрагменте
Вопрос
Почему private val adapter by lazy { Adapter(binding.root.context) } во фрагменте может быть проблемой?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Фрагмент переживает свою view, и lazy удержит старую view. Время жизни фрагмента дольше времени жизни его view: при уходе в back stack view уничтожается, а фрагмент остаётся.
Варианты ответа
- Фрагмент переживает свою view, и lazy удержит старую viewправильный ответ
lazyнельзя использовать во фрагментах, только в Activity- Адаптер создастся дважды: при attach и при создании view
lazyпо умолчанию вычисляет значение в фоновом потоке
Разбор
Время жизни фрагмента дольше времени жизни его view: при уходе в back stack view уничтожается, а фрагмент остаётся. Значение lazy вычисляется один раз и живёт столько же, сколько фрагмент, поэтому держит ссылки на старую view или её контекст, и после возврата работает со старой иерархией. Правильно создавать такие объекты в onViewCreated и обнулять в onDestroyView. Двойного создания и фоновых потоков у lazy нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.