Что такое «смена конфигурации»?
Как происходит пересоздание?
Это любое изменение, требующее пересоздания Activity
или Fragment
, например:
- поворот экрана
- смена языка
- смена темы (light/dark)
- подключение клавиатуры и т.п.
По умолчанию Android убивает и пересоздаёт Activity
, чтобы применить новую конфигурацию.
Как происходит пересоздание?
Activity.onPause()
Activity.onStop()
Activity.onSaveInstanceState(Bundle)
— Система сохраняет состояниеActivity.onDestroy()
— Старый экземпляр уничтожается- Новый
Activity
создаётся сonCreate(Bundle?)
— сюда приходитsavedInstanceState
- Ваша задача — восстановить всё, что важно
Куда сохраняется Bundle?
- Android сериализует Bundle (все
putString()
,putInt()
, и т.д.) - Он кладётся в
ActivityClientRecord
на стороне ActivityManagerService - Когда процесс пересоздаётся — данные извлекаются и передаются в
onCreate()
‼️ Bundle должен содержать только примитивы, Parcelable
, Serializable
— иначе он НЕ будет сериализован корректно и Activity
не восстановится.