Смена конфигурации. Как и где обрабатывать? Куда сохраняется этот стейт в системе?

Что такое «смена конфигурации»?

Как происходит пересоздание?
Это любое изменение, требующее пересоздания Activity или Fragment, например:

  • поворот экрана
  • смена языка
  • смена темы (light/dark)
  • подключение клавиатуры и т.п.

По умолчанию Android убивает и пересоздаёт Activity, чтобы применить новую конфигурацию.

Как происходит пересоздание?
  1. Activity.onPause()
  2. Activity.onStop()
  3. Activity.onSaveInstanceState(Bundle) — Система сохраняет состояние
  4. Activity.onDestroy() — Старый экземпляр уничтожается
  5. Новый Activity создаётся с onCreate(Bundle?) — сюда приходит savedInstanceState
  6. Ваша задача — восстановить всё, что важно
Куда сохраняется Bundle?
  1. Android сериализует Bundle (все putString(), putInt(), и т.д.)
  2. Он кладётся в ActivityClientRecord на стороне ActivityManagerService
  3. Когда процесс пересоздаётся — данные извлекаются и передаются в onCreate()

‼️ Bundle должен содержать только примитивы, Parcelable, Serializable — иначе он НЕ будет сериализован корректно и Activity не восстановится.


Опубликовано

в

от

Метки: