2010-06-27 4 views
10

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

Что конкретно происходит не так:

  • у меня эмулятор работает, и установки средства разработки для destroy() всех видов деятельности, когда они больше не видны. (Чтобы я мог доказать, что сохранение/восстановление работают нормально.)
  • Запущена активность, и я перехожу к изменению своего состояния.
  • Я запускаю новое действие, пусть оно работает на мгновение, а затем используйте кнопку «назад», чтобы перейти к моему предыдущему действию.
  • По возвращении к рассматриваемой Деятельности я замечаю, что состояние по умолчанию возвращено, таким образом, оно не имеет состояния, которое оно должно.

Я заметил, что onSaveInstanceState() называется, onCreate() называется, но имеет нулевой пучок, и onRestoreInstanceState() никогда не вызывается.

Кто-нибудь видел это раньше?

+0

Я сожалею, я знаю это вопросы давно, но как вы сохранили состояние своей деятельности? Не могли бы вы посмотреть мой вопрос? http://stackoverflow.com/questions/26142255/retrieve-an-activity-after-time-out-warning-notification – Hamid

ответ

3

Я считаю, что я выяснил проблему, и именно с подробностями я не раскрывал в исходном вопросе.

Одна из вещей, которые я сохраняю в своем комплекте, довольно велика (растровое изображение размером 500x1000 пикселей). Когда я удалил это из моего Bundle, все остальное было сохранено, метод onCreate() был вызван с Bundle, а также вызван onRestoreInstanceState().

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

4

Устанавливаемые вами параметры инструментов Dev могут не соответствовать ожидаемому поведению.

Если вы хотите проверить onSaveInstanceState()/onRestoreInstanceState(), то проще всего изменить ориентацию (<Ctrl>-<F11>). По умолчанию ваша деятельность уничтожается и воссоздается с использованием состояния экземпляра.

+0

Благодарим вас за ответ. Что-то, о чем я не упоминал, это то, что я заблокировал это действие со следующими атрибутами в манифесте: android: configChanges = "keyboardHidden | orientation" android: screenOrientation = "portrait" –

+0

Я попытался изменить ориентацию и сделал так называемый ' onRestoreInstanceState() '. Но я не восстанавливаю переменную в этом методе, и до сих пор мой EditText ранее вводил значения, а не ничего. Вы можете объяснить? – Geek

+0

@Akash: Существует встроенная реализация 'onSaveInstanceState()' и 'onRestoreInstanceState()', которые обрабатывают явно изменяемое пользователем состояние виджета, например текст в 'EditText'. – CommonsWare

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