«Не сохранять действия» установлено, onSaveInstanceState не вызывается - PullRequest
0 голосов
/ 14 апреля 2020

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

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

Вопрос : Я ошибаюсь, ожидая вызова onSaveInstanceState в этом сценарии, или могут быть другие факторы, препятствующие срабатыванию метода? Если нет, что еще я могу сделать, чтобы восстановить состояние в этом сценарии?

1 Ответ

0 голосов
/ 14 апреля 2020

Я думаю, что возможны две возможности.

  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 и т. д. c. в onPause.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...