Ответ
Флаг configChanges в манифесте позволяет Activity самостоятельно обрабатывать изменения конфигурации (поворот экрана, изменение языка и т.д.), предотвращая пересоздание.
Основные варианты:
android:configChanges="orientation|screenSize|keyboardHidden"
Плюсы:
- Улучшает производительность (избегаем пересоздания)
- Контроль над поведением при изменениях
Минусы:
- Нужно вручную обрабатывать изменения в
onConfigurationChanged() - Легко упустить важные изменения (например, локализация)
Пример:
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
// Обновляем UI для ландшафта
}
}
Используйте осторожно, только когда действительно нужно сохранить состояние!
Ответ 18+ 🔞
Ёпта, слушай, вот эта штука с configChanges в манифесте — это как волшебный пендель системе. Говоришь ей: «Не еби мне мозги пересозданием активити, я сам всё обработаю, когда экран поверну или язык поменяю».
Вот смотри, пишешь в манифесте такую строчку, и жизнь налаживается:
android:configChanges="orientation|screenSize|keyboardHidden"
Что хорошего, спросишь? Да овердохуища всего!
- Скорость, ёпта! Активность не пересоздаётся каждый раз, когда ты телефон повернул. Всё остаётся как есть, состояние не теряется — красота.
- Контроль. Ты сам решаешь, что делать при изменении. Не система тебе, а ты системе. Чувствуешь разницу?
Но и подводных камней, блядь, хватает:
- Всё на твоей шее. Теперь ты должен вручную, в методе
onConfigurationChanged(), прописывать, как интерфейс перестраивать. Забыл — получи кривой UI и удивление пиздец у пользователя. - Можно проебаться. Допустим, локализацию (
locale) не добавил в список, а пользователь язык сменил. Твоя активита этого и не заметит, ресурсы не обновятся. Пизда рулю, приложение говном покажется.
Вот тебе пример, как это выглядит в коде:
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
// Тут перестраиваем UI под альбомную ориентацию
// Например, прячем одну хуйню, показываем другую
}
}
Короче, инструмент мощный, но хитрая жопа. Используй его с умом, только когда реально надо состояние сохранить, а не от лени. А то так и до багов недалеко, доверия ебать ноль потом будет к твоему коду.