Быстрый Фон
По умолчанию, когда в Android происходят определенные ключевые изменения конфигурации (типичным примером является изменение ориентации), Android полностью перезапускает запущенную активность, чтобы помочь ей приспособиться к таким изменениям.
Когда вы определяете android:configChanges="keyboardHidden|orientation"
в своем AndroidManifest, вы говорите Android: «Пожалуйста, не делайте сброс по умолчанию, когда клавиатура извлечена или телефон повернут; я хочу справиться с этим самостоятельно. Да, я знаю, что делаю "
Это хорошо? Скоро увидим ...
Не беспокойся?
Одним из плюсов, с которого вы начинаете, является то, что есть:
не нужно беспокоиться о вашей активности
Во многих случаях люди ошибочно полагают, что, когда у них есть ошибка, которая генерируется изменением ориентации («поворот»), они могут просто исправить ее, вставив android:configChanges="keyboardHidden|orientation"
.
Тем не менее, android: configChanges = "клавиатура скрытая | ориентация" является ничем иным, как бинтом. По правде говоря, существует много способов изменения конфигурации. Например, если пользователь выбирает новый язык (т. Е. Языковой стандарт изменился), ваша деятельность будет возобновлена так же, как при изменении ориентации. Если вы хотите, вы можете просмотреть список всех различных типов изменений конфигурации .
Изменить : что еще более важно, хотя, как указывает hackbod в комментариях, ваша активность также будет перезапущена, когда ваше приложение будет работать в фоновом режиме, и Android решит освободить часть памяти, убив ее. Когда пользователь возвращается к вашему приложению, Android попытается перезапустить действие так же, как и в случае какого-либо другого изменения конфигурации. Если вы не можете справиться с этим - пользователь не будет счастлив ...
Другими словами, использование android:configChanges="keyboardHidden|orientation"
не является решением для ваших "забот". Правильный путь - это кодировать ваши действия так, чтобы они были довольны любым перезапуском Android. Это хорошая практика, которая поможет вам в будущем, поэтому привыкните к ней.
Так, когда я должен использовать это?
Как вы упомянули, есть явное преимущество. Перезапись изменения конфигурации по умолчанию для поворота путем его самостоятельной обработки ускорит процесс. Тем не менее, эта скорость идет с ценой удобства.
Проще говоря, если вы используете один и тот же макет как для портрета, так и для ландшафта, вы в хорошей форме, выполнив перезапись. Вместо полномасштабной перезагрузки действия, представления будут просто перемещаться, чтобы заполнить оставшееся пространство.
Однако , если по какой-то причине вы используете другую компоновку, когда устройство находится в альбомной ориентации, тот факт, что Android перезагружает вашу активность, хорош, потому что тогда она загрузит правильную компоновку. [Если вы используете переопределение в таком Деятельности и хотите сделать магическое изменение макета во время выполнения ... ну, удачи - это далеко не просто]
Краткое резюме
Во что бы то ни стало, если вам android:configChanges="keyboardHidden|orientation"
подходит, то используйте его. Но ПОЖАЛУЙСТА , обязательно проверьте, что происходит, когда что-то меняется, потому что изменение ориентации - не единственный способ полного перезапуска Действия.