При повороте экрана меняется конфигурация устройства, например, ориентация. Android реагирует на это уничтожением и последующим созданием активности заново, чтобы применить необходимые изменения в ресурсах, такие как layout-файлы, специфичные для портретной или ландшафтной ориентации.
Жизненный цикл активности при повороте:
onPause()onStop()onDestroy()onCreate()onStart()onResume()Для сохранения данных состояния перед уничтожением активности используются:
onSaveInstanceState(): сохраняет небольшие данные в Bundle.
kotlin
Восстановление в onCreate() или onRestoreInstanceState():
kotlin
ViewModel: Сохраняет данные в течение всего жизненного цикла UI-контроллера (Activity/Fragment), даже при изменении конфигурации. ViewModel переживает уничтожение активности и не теряет свое состояние.
kotlin
Использование в активности/фрагменте:
kotlin
Сохранение данных в SharedPreferences или базе данных для более персистентных данных.
Чтобы избежать пересоздания активности при повороте экрана, можно объявить, что активность самостоятельно обрабатывает изменения конфигурации. Это делается в манифесте, добавляя configChanges="orientation|screenSize|screenLayout" атрибут к тегу <activity>:
xml
В этом случае вместо пересоздания активности будет вызван метод onConfigurationChanged():
kotlin
Использование configChanges не рекомендуется в большинстве случаев, так как может привести к сложностям в управлении состоянием и ресурсами при различных изменениях конфигурации. Предпочтительный подход – использовать ViewModel для сохранения данных состояния.