Каковы плюсы и минусы использования configChanges = "direction" для устройств Android? - PullRequest
7 голосов
/ 27 декабря 2010

Я хочу использовать android:configChanges="orientation|keyboardHidden" для нескольких моих действий, чтобы мой onCreate больше не вызывался, но я подумал, что сначала у меня будет список плюсов и минусов, потому что эта ссылка говорит, что ее следует использовать только в качестве крайней меры.

Ответы [ 2 ]

6 голосов
/ 27 декабря 2010

Странно, что Google на самом деле не говорит больше о причинах этого, но на самом деле есть три основные причины, по которым я могу придумать, чтобы избежать использования этого подхода:

  • По моему опыту, некоторые типы представлений (особенно WebViews и MapViews на Android 2.1 или ниже) могут вести себя довольно странно после изменения ориентации, если они не были воссозданы (например, кнопки масштабирования неправильно расположены).
  • Он не позволяет использовать ориентированные макеты (см., Например, альбомное представление нового приложения Market).
  • Это может помешать вам обнаружить в приложении ошибочное поведение, связанное с другими типами причин, по которым ваша активность может быть уничтожена и воссоздана (например, нехватка памяти или другие обычные убийства в фоновом режиме). То есть, если ваша деятельность может корректно обрабатывать перезапуск из-за поворота, она, вероятно, может обрабатывать перезапуск из-за фонового уничтожения. Однако если вы пропустите обработку ротации, вы можете не столкнуться с перезапуском из-за фонового уничтожения при обычном тестировании, пока пользователь с более старым телефоном с малой памятью не напишет сообщение об ошибке.

Последняя причина - большая; особенно в старых телефонах с низкой оперативной памятью и в предположительно более агрессивных режимах автоматического убийства в Gingerbread, ваши действия должны знать, как быстро воссоздать их после разрушения, сохранив их состояние, независимо от ориентации. И как только ваша деятельность сможет справиться с этими видами разрушения / отдыха, вы, вероятно, в любом случае будете готовы к убийствам из-за смены ротации. Вы можете набрать некоторую скорость, поглотив событие поворота (поскольку вам не нужно возвращаться к раздуванию макета и тому подобному), но на этом все, на данный момент.

Если вы решите проглотить ротацию, я настоятельно рекомендую всегда использовать эмулятор или устройство с установленным параметром Development.apk «Немедленно уничтожить действия», а затем проверять, переключаются ли приложения или выполняется обратный ход. ваш стек задач по-прежнему работает правильно.

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

5 голосов
/ 27 декабря 2010

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

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

По моему (возможно, небольшому) опыту, я думаю, что не стоит затрачивать усилия на выполнение всей сантехники.

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

Хотя большинство людей выберут быстрое решение, изменивманифест и настройка их активности с Android: configChanges = ”клавиатура скрытая | ориентация”, я думаю, важно понимать, что есть альтернативы этому.

Требуется больше кода, но он дает вам лучшее представление о том, как работает система в целом.

...