Я проверяю, может ли мое приложение восстанавливаться после непредвиденных ситуаций, которые приводят к тому, что ОС завершает процесс моего приложения из-за различных обстоятельств, таких как нехватка памяти. Для этого я включил «Не сохранять действия» в параметрах разработчика.
Я пытаюсь восстановить состояние приложения, сохраняя значения состояния в Activity's Bundle с помощью метода жизненного цикла onSaveInstanceState
, но после установки точек останова я заметил, что onSaveInstanceState
не вызывается сильный>.
Вопрос: Я ошибаюсь, ожидая вызова onSaveInstanceState
в этом сценарии, или могут быть другие факторы, препятствующие срабатыванию метода? Если нет, что еще я могу сделать, чтобы восстановить состояние в этом сценарии?
1 ответ
Я думаю, предполагаются две возможности.
- Ваш сценарий неверен
Официальная ссылка гласит:
Не путайте этот метод с обратными вызовами жизненного цикла активности, такими как onPause(), который всегда вызывается, когда пользователь больше не взаимодействует с активностью, или onStop(), который вызывается, когда активность становится невидимой. Одним из примеров, когда вызываются onPause() и onStop(), а не этот метод, является то, что пользователь переходит обратно от действия B к действию A: нет необходимости вызывать onSaveInstanceState(Bundle) для B, потому что этот конкретный экземпляр никогда не будет восстановлен. , поэтому система избегает его вызова. Примером, когда вызывается onPause(), а не onSaveInstanceState(Bundle), является случай, когда действие B запускается перед действием A: система может избежать вызова onSaveInstanceState(Bundle) для действия A, если оно не было уничтожено во время существования B, поскольку состояние пользовательского интерфейса A останется нетронутым.
Если в вашем сценарии нет необходимости звонить, onSaveInstanceState
не будет вызываться.
- Ваши точки останова неверны
При вызове этот метод будет выполняться после onStop() для приложений, предназначенных для платформ, начинающихся с Build.VERSION_CODES.P. Для приложений, ориентированных на более ранние версии платформы, этот метод будет выполняться до onStop(), и нет никаких гарантий относительно того, произойдет ли он до или после onPause().
Таким образом, время вызова onSaveInstanceState
зависит от вашей целевой платформы.
Простой обходной путь — сделать резервную копию данных с помощью SharedPreference и т. д. в onPause.
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.