Android: эффективная обработка поворота экрана - PullRequest
7 голосов
/ 25 января 2012

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

Я знаю несколько способов решить эту проблему, но меня интересует наиболее эффективный способ.

1) Скажите манифесту, что я буду обрабатывать изменение ориентации, переопределив метод onConfigurationChanged() и оставив его пустым.

2) переопределить onSaveInstanceState() и сохранить данные для повторного заполнения в onCreate()

3) Переопределить onPause(), который создаст пакет данных и отправит его на onSaveInstanceState()

Очевидно, что это все варианты, но какой из них лучше (малый, средний, большой объем данных)

Спасибо

1 Ответ

13 голосов
/ 25 января 2012

Некоторые конфигурации устройств могут изменяться во время выполнения (например, ориентация экрана, доступность клавиатуры и язык).Когда происходит такое изменение, Android перезапускает запущенную активность (вызывается onDestroy(), затем onCreate()).

  • Чтобы правильно обработать перезапуск, важно, чтобы ваша деятельность восстановила свое предыдущее состояниечерез обычный жизненный цикл Activity, в котором Android вызывает onSaveInstanceState() до того, как уничтожает вашу активность, чтобы вы могли сохранить данные о состоянии приложения.Затем вы можете восстановить состояние во время onCreate() или onRestoreInstanceState().

Однако вы можете столкнуться с ситуацией, в которой перезапуск приложения и восстановление значительных объемов данных может быть дорогостоящим и создатьплохой пользовательский опыт.В такой ситуации у вас есть два других варианта:

  1. Сохранить объект во время изменения конфигурации

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

  2. Обработка изменения конфигурации самостоятельно

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

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

РЕДАКТИРОВАТЬ: В соответствии с вашими потребностями просто изменить макет, я думаю, что вы должны использовать onConfigurationChanged() и сделатьизменения в нем.

...