2013-08-13 5 views
0

Я знаю, что saveInstanceState() используется для хранения переменных активности, текста в EditText и т. Д.Когда использовать метод saveInstanceState()?

Но у меня есть сомнения, что я должен сохранить состояние зрения?

Позвольте мне дать вам сценарий. У моего представления есть 3 кнопки. При щелчке по одному из них WebView отображается пользователю (в том же действии). Теперь, если приложение будет убито, я должен сохранить состояние, в котором пользователь отображал WebView, когда приложение было убито, а когда активность воссоздана, отобразите WebView вместо кнопок?

Другой сценарий: у меня есть 3 вкладки. При выборе каждой вкладки отображается другое представление. Как объяснено в предыдущем случае, нужно снова сохранить этот пользователь, который последний раз выбрал эту вкладку?

Лучше всего, если вы сможете объяснить случаи, когда я должен и не должен сохранять состояние активности.

ответ

2

Операционная система знает, когда она должна воссоздать предыдущее состояние вашего приложения (изменилась ориентация экрана или ваше приложение было отключено ОС в фоновом режиме), а когда создать новый экземпляр (пользователь оставил ваше приложение с помощью Кнопка назад). Метод onRestoreInstanceState() вызывается только тогда, когда есть состояние для восстановления (когда система восстанавливает предыдущее состояние, а не создает новый экземпляр активности).

Короткий ответ, то, что если вы переопределить onSaveInstanceState() и onRestoreInstanceState(), система будет вызывать их, когда это необходимо, и вам не придется беспокоиться о принятии решения, когда вы «должны» сохранить состояние.

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

Для получения дополнительной информации см. the Android documentation on recreating an activity.

+0

Мое приложение не нуждается в поддержке изменений ориентации. Он поддерживает только портрет. – Geek

+0

Я не знаю даже, следует ли использовать этот метод. Потому что, если приложение положить в фоновом режиме, нажав кнопку домой и открыть приложение снова, он показывает мне последнее состояние. Тогда зачем мне вручную сохранять и восстанавливать? – Geek

+0

Если вы разместите свое приложение в фоновом режиме, нажав кнопку «домой», он не обязательно будет полностью убит (просто приостановлен). Если вы разместите свое приложение в фоновом режиме, а затем откройте достаточно других приложений, которые ваш телефон должен убить ваше приложение, чтобы восстановить память, а затем снова открыть приложение, вы потеряете свое состояние. Как пользователь, вы не сделали ничего по-другому между этими двумя сценариями, но разные вещи идут за кулисами, и ваше приложение должно поддерживать оба. – Michelle

1

Я не очень много исследовал сохраненныеIntanceState на app gets killed. Но да, вы можете сохранить, может быть, целую переменную (ссылаясь на какую кнопку нажата) в состоянии, так что, когда активность воссоздана, вы знаете, какой веб-просмотр использовался для показа (или нет). То же самое касается вашей второй ситуации.

Некоторый дополнительный Прецедент из сохраненного состояния экземпляра:

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

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

+0

Я не уверен, следует ли использовать эти методы для сохранения и восстановления состояния. Одна из причин заключается в том, что мое приложение не поддерживает ориентацию, отличную от портрета. Вторая причина заключается в том, что когда я помещаю приложение в фоновый режим и снова открываю его, он показывает мне последнее состояние, откуда я помещал его в фоновом режиме. например, я выбрал конкретную вкладку перед тем, как положить приложение в фоновом режиме, и после открытия приложения он показал мне эту вкладку как выбранную, которая не является выбором по умолчанию. Давайте поговорим о третьем случае, когда приложение будет убито ОС. Если приложение было убито ОС, а затем пользователь снова открывает приложение, я считаю, что пользователь должен быть направлен на главный экран. – Geek

+0

Поскольку приложение не было в фоновом режиме, оно было закрыто. Открытие закрытого приложения должно отображаться только на главном экране. Правильно ли я в этом третьем случае? – Geek

+0

Лично я постараюсь, чтобы пользователь оставался в своем последнем посещенном месте (используя db или sharedpref). Когда пользователь нажимает на дом, большинство из них предпочтут иметь тот же экран, когда они вернутся. OS убивает ваше приложение, потому что памяти недостаточно, и это не то, что пользователь знал бы, они ожидали бы увидеть, что показано, когда они ушли с помощью кнопки «домой». Я не очень уверен в возможности восстановления savedInstanceState после того, как OS убивает ваше приложение. –

Смежные вопросы