Изменение ориентации экрана в макете моего приложения для Android

#android

#Android

Вопрос:

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

Но когда я меняю ориентацию экрана, мои данные для редактирования текста, просмотра текста и переключателя не удаляются.

Итак, какова основная цель использования onSaveInstanceState() метода. Почему мы должны его использовать, если мои данные надежно сохранены?

Ответ №1:

Некоторые представления / свойства могут обрабатываться по умолчанию. Вы могли бы просмотреть документы, чтобы точно узнать, какие из них и как о них заботятся, но…

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

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


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

Не путайте этот метод с обратными вызовами жизненного цикла активности, такими как onPause, который всегда вызывается, когда действие находится в фоновом режиме или на пути к уничтожению, или onStop, который вызывается перед уничтожением. Один из примеров того, когда вызываются onPause и onStop, а не этот метод, — это когда пользователь переходит от действия B к действию A: нет необходимости вызывать onSaveInstanceState для B, потому что этот конкретный экземпляр никогда не будет восстановлен, поэтому система избегает его вызова. Примером, когда вызывается onPause, а не onSaveInstanceState, является запуск действия B перед действием A: система может избежать вызова onSaveInstanceState для действия A, если оно не будет уничтожено в течение срока службы B, поскольку состояние пользовательского интерфейса A останется неизменным.

Этот метод вызывается после OnStart(), когда действие повторно инициализируется из ранее сохраненного состояния.

Большинство реализаций просто используют onCreate (Bundle) для восстановления своего состояния, но иногда бывает удобно сделать это здесь после выполнения всей инициализации или разрешить подклассам решать, использовать ли вашу реализацию по умолчанию. Реализация этого метода по умолчанию выполняет восстановление любого состояния представления, которое ранее было заморожено с помощью onSaveInstanceState (Bundle).

  • При обработке ваших представлений по умолчанию с помощью этой пары методов:

    Реализация по умолчанию заботится о большей части состояния пользовательского интерфейса для каждого экземпляра, вызывая View.onSaveInstanceState() для каждого представления в иерархии, имеющего идентификатор, и сохраняя идентификатор текущего сфокусированного представления (все это восстанавливается реализацией onRestoreInstanceState по умолчанию). Если вы переопределите этот метод для сохранения дополнительной информации, не захваченной каждым отдельным представлением, вы, вероятно, захотите перейти к реализации по умолчанию, в противном случае будьте готовы сохранить все состояние каждого представления самостоятельно.

Комментарии:

1. итак, рекомендуется использовать onsaveinstancestate(), а также функцию восстановления? Даже если по умолчанию мои данные сохраняются. Верно?

2. Как я уже сказал, это зависит от вашего варианта использования. Если вам нужно сохранить состояние, сделайте это самостоятельно, чтобы убедиться, что это так. Вы не всегда можете полагаться на значения по умолчанию, поскольку они могут и, вероятно, действуют по-разному в разных версиях API. Я отредактирую еще немного информации в своем ответе. Обратите внимание на ту часть, когда onSavedInstanceState(...) не будет вызван. это можно легко упустить из виду, и его трудно отследить позже.