Работал ли с флагом configChanges у компонентов Android

Ответ

Флаг 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 под альбомную ориентацию
        // Например, прячем одну хуйню, показываем другую
    }
}

Короче, инструмент мощный, но хитрая жопа. Используй его с умом, только когда реально надо состояние сохранить, а не от лени. А то так и до багов недалеко, доверия ебать ноль потом будет к твоему коду.