при изменении конфигурации — например, ориентации, языка или параметров экрана — система перезапускает Activity перед этим вызывается onSaveInstanceState() для сохранения текущего состояния после чего Activity уничтожается через onPause(), onStop() и onDestroy() затем создаётся новый экземпляр Activity, уже работающий с обновлённой конфигурацией сохранённые данные восстанавливаются в onCreate() либо onRestoreInstanceState() стандартное поведение можно изменить с помощью android:configChanges, указанного в манифесте корректная обработка конфигурации необходима для плавного UX и защиты пользовательских данных от потери
Как Android обрабатывает изменения конфигурации Activity?
при изменении конфигурации — например, ориентации, языка или параметров экрана — система перезапускает Activity перед этим вызывается onSaveInstanceState() для сохранения текущего состояния после чего Activity…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Как Android обрабатывает изменения конфигурации Activity?
- при изменении конфигурации — например, ориентации, языка или параметров экрана — система перезапускает Activity
- перед этим вызывается onSaveInstanceState() для сохранения текущего состояния
- после чего Activity уничтожается через onPause(), onStop() и onDestroy()
- затем создаётся новый экземпляр Activity, уже работающий с обновлённой конфигурацией
- сохранённые данные восстанавливаются в onCreate() либо onRestoreInstanceState()
- стандартное поведение можно изменить с помощью android:configChanges, указанного в манифесте
- корректная обработка конфигурации необходима для плавного UX и защиты пользовательских данных от потери
Подробный ответ
Основной ответ
В Android изменение конфигурации — например, поворот устройства, смена языка или изменение размера экрана — обычно вызывает уничтожение текущей Activity и создание нового экземпляра с обновлёнными параметрами. Благодаря этому система заново загружает UI и ресурсы, соответствующие новой конфигурации устройства. В процессе вызываются методы жизненного цикла onPause(), onStop(), onDestroy(), после чего создаётся новая Activity через onCreate() с актуальными ресурсами. Если полное пересоздание не требуется, разработчик может самостоятельно обрабатывать изменения с помощью атрибута android:configChanges в манифесте, однако в таком случае управление обновлением конфигурации ложится на него.
Ключевые моменты
- Полное пересоздание Activity — штатный механизм, который гарантирует загрузку ресурсов, подходящих для новых условий: layout, strings, drawable и других. В React Native и Jetpack Compose принцип похожий, хотя реализуется средствами соответствующей платформы.
- Сохранение состояния: Для восстановления состояния UI применяют связку
onSaveInstanceState()+Bundle. Кроме того, часто используют ViewModel из архитектуры Jetpack: она сохраняется при изменениях конфигурации и не уничтожается вместе с Activity. - Оптимизации: В Android 13+ доступны новые API, предназначенные для более эффективной работы с конфигурациями. Например,
OnConfigurationChangedCallbackпозволяет гибче реагировать на изменения, не пересоздавая Activity.
Практический контекст
При разработке Android-приложений важно надёжно сохранять и восстанавливать данные во время изменения конфигурации, чтобы пользователь не терял текущее состояние. На практике для этого часто используют ViewModel и SavedStateHandle из Jetpack. Кастомную обработку через configChanges обычно оставляют для узкоспециализированных задач, поскольку она помогает избежать дополнительных багов и роста технического долга.