Что такое изменение конфигурации Что происходит с приложением на Android при этом

Изменение конфигурации в Android происходит, когда система изменяет свои параметры, такие как ориентация экрана, язык устройства, размер шрифта и другие настройки. Приложения должны адаптироваться к этим изменениям, чтобы обеспечить плавный и удобный пользовательский опыт.

Когда происходит изменение конфигурации, система пересоздает активности (Activity) по умолчанию, чтобы обновить их в соответствии с новыми параметрами. Это может привести к потере данных и неудобству для пользователей.

Для того чтобы предотвратить пересоздание активности и сохранить ее состояние при изменении конфигурации, можно использовать следующие методы:

  1. Использование атрибута конфигурации android:configChanges: Вы можете указать в манифесте активности, какие конфигурации следует обрабатывать самостоятельно, чтобы предотвратить пересоздание активности. Для этого используется атрибут android:configChanges.
<activity
    android:name=".MyActivity"
    android:configChanges="orientation|screenSize|screenLayout">
  1. Переопределение метода onConfigurationChanged: При использовании атрибута android:configChanges нужно также переопределить метод onConfigurationChanged в коде активности и выполнить необходимые действия при изменении конфигурации.
override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    // Выполнить необходимые действия при изменении конфигурации, например, обновление пользовательского интерфейса
}
  1. Использование объекта Bundle для сохранения и восстановления состояния: Для сохранения и восстановления состояния активности при изменении конфигурации можно использовать методы onSaveInstanceState и onRestoreInstanceState, а также объект Bundle.
class MyActivity : AppCompatActivity() {

    private var counter = 0

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        savedInstanceState?.let {
            counter = it.getInt("counter")
            // Восстановить состояние
        }
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putInt("counter", counter)
        // Сохранить состояние
    }
}

В этом примере переменная counter сохраняется и восстанавливается при изменении конфигурации с помощью методов onSaveInstanceState и onRestoreInstanceState.