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()