Что такое Fragment в Android
Что проверяют
Понимаете ли вы жизненный цикл фрагмента и его отличие от жизненного цикла view, а не только определение «часть экрана». Следом часто спрашивают, как фрагменты уживаются с Compose и Navigation и чем заменить устаревшие приёмы вроде retain-фрагментов.
Как отвечать
Fragment это переиспользуемая часть интерфейса со своим жизненным циклом, которая живёт внутри Activity и управляется FragmentManager. Платформенный android.app.Fragment устарел ещё в API 28, используют androidx.fragment.app.Fragment.
Про жизненный цикл главное:
- два цикла: у самого фрагмента (от
onCreateдоonDestroy) и у его view (отonCreateViewдоonDestroyView). Фрагмент в back stack теряет view, но остаётся жив; viewLifecycleOwner: подписки наLiveDataи сборFlowв UI делаются через него, иначе после возврата на экран появятся дублирующиеся наблюдатели;onViewCreated: место для работы с view.onActivityCreatedустарел, его заменяютonViewCreatedили наблюдатель жизненного цикла Activity;- binding: ссылку на него обнуляют в
onDestroyView, иначе фрагмент держит всю иерархию view.
Взаимодействие: транзакции add, replace, addToBackStack. Данные между фрагментами передают через общую ViewModel (activityViewModels()) или Fragment Result API (setFragmentResult), а не через прямые ссылки.
RetainFragment это старый приём: setRetainInstance(true) устарел, состояние при повороте хранит ViewModel, а смерть процесса переживает SavedStateHandle. Новые экраны всё чаще пишут на Compose, а фрагмент остаётся контейнером с ComposeView внутри.
Где спотыкаются
Перечисляют колбэки подряд и не упоминают жизненный цикл view. Следующий вопрос обычно про утечку через binding, и на нём ответ заканчивается.
Передают this вместо viewLifecycleOwner в observe и не понимают, откуда двойные срабатывания после возврата по back stack.
Делают commit() после onSaveInstanceState и получают IllegalStateException. Правильно не запускать транзакции после сохранения состояния, а commitAllowingStateLoss применять осознанно, понимая, что состояние может потеряться.