OnRestoreInstanceState() не вызывается, когда ожидается

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

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

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

Объяснение, почему onRestoreInstanceState() не вызывается (или более конкретно: когда оно вызывается) задается в другом вопросе: onSaveInstanceState() и onRestoreInstanceState()