Когда использовать метод saveInstanceState()?
Я знаю saveInstanceState()
используется для хранения переменных деятельности, текста в EditText и т. д.
Но я сомневаюсь, что я должен сохранить состояние зрения?
Позвольте мне дать вам сценарий. На мой взгляд есть 3 кнопки. При щелчке по одному из них пользователю отображается веб-представление (в том же упражнении). Теперь, если приложение будет убито, должен ли я сохранять состояние, при котором пользователь отображал WebView, когда приложение было убито, а когда активность воссоздается, отображать WebView вместо кнопок?
Другой сценарий, у меня есть 3 вкладки в поле зрения. Выбор каждой вкладки показывает другое представление. Как объяснено в приведенном выше случае еще раз, я должен сохранить, что пользователь последний раз выбрал эту вкладку?
Будет лучше, если вы сможете объяснить случаи, когда я должен и не должен сохранять состояние активности.
2 ответа
Операционная система знает, когда она должна воссоздать предыдущее состояние вашего приложения (ориентация экрана изменилась или ваше приложение было убито в фоновом режиме ОС) и когда создавать новый экземпляр (пользователь покинул ваше приложение с помощью кнопки "Назад"). onRestoreInstanceState()
метод вызывается только тогда, когда есть состояние для восстановления (когда система восстанавливает предыдущее состояние, в отличие от создания нового экземпляра действия).
Короткий ответ, то, что если вы переопределите onSaveInstanceState()
а также onRestoreInstanceState()
система будет вызывать их, когда это уместно, и вам не придется беспокоиться о том, когда вы должны "сохранить" состояние.
При переопределении onSaveInstanceState()
Да, вы должны сохранить все о состоянии вашей деятельности. Этот метод используется при изменении ориентации экрана. Подумайте об этом - если вы поворачиваете свой телефон, ожидаете ли вы, что текущее приложение будет менять вкладки, или экран, который только что открылся, исчезнет?
Для получения дополнительной информации см. Документацию Android по воссозданию занятия.
Я не провел очень много исследований по saveIntanceState на app gets killed
, Но да, вы можете сохранить целочисленную переменную (в зависимости от того, какая кнопка была нажата) в состоянии, чтобы при воссоздании активности вы знали, какое веб-представление раньше отображалось (или нет). То же самое касается вашей второй ситуации.
Некоторые дополнительные варианты использования сохраненного состояния экземпляра:
Один из наиболее часто используемых сценариев - это когда пользователь переключает ориентацию, скажем, у вас есть пара редактируемых текстов на экране, их удерживающие тексты исчезли бы, если бы пользователь изменил ориентацию своего устройства. Сохраненное состояние экземпляра поможет вам восстановить введенные тексты.
Другая ситуация - у вас, скорее всего, будет несколько переменных класса в вашей активности, вероятно, используемых для сохранения того, что сделал пользователь, или некоторый объект временного списка в активности списка. Сохранение этих переменных также избавляет вас от необходимости восстанавливать данные об изменении ориентации.