Как FragmentManager переживает смену конфигурации

«Как FragmentManager переживает смену конфигурации» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

FragmentManager автоматически сохраняет и восстанавливает состояние фрагментов при смене конфигурации (например, повороте экрана). Это происходит благодаря:

  1. FragmentManager сохраняет стек фрагментов в Bundle через onSaveInstanceState()
  2. При воссоздании Activity FragmentManager восстанавливает стек и все добавленные фрагменты
  3. Фрагменты с setRetainInstance(true) сохраняют свои экземпляры (но не View)

Пример:

class MyFragment : Fragment() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        retainInstance = true // сохранит экземпляр фрагмента
    }
}

Важно: View пересоздаются, поэтому нужно обрабатывать восстановление UI в onCreateView(). Для сохранения данных лучше использовать ViewModel.