onSaveInstanceState не вызывается

У меня есть действие, которое запускает различные действия для кодов результатов и получения результатов в onActivityResult Метод запускает соответствующую деятельность на основе кода результата.

onSaveInstanceState не вызывается в Activity, которая началась для результата.

Например, Навигационное действие начинает Действие A как:

Intent intent = new Intent(this, A.class);
    startActivityForResult(intent, Constants.REQUEST_CODE);

Затем А завершает работу, устанавливая код результата, чтобы приложение снова перенаправлялось в навигационное действие и onActivityResult метод будет вызван.

Итак, мой вопрос: почему деятельность А onSaveInstanceState не вызывается при завершении и переходе обратно к навигационной активности?

3 ответа

Решение

onSaveInstanceState() вызывается только в том случае, если действие уничтожается.

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

от http://developer.android.com/reference/android/app/Activity.html:

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

Также описание метода для onSaveInstanceState() точно описывает вашу ситуацию:

Не путайте этот метод с обратными вызовами жизненного цикла действия, такими как onPause(), который всегда вызывается, когда действие помещается в фоновом режиме или на пути к его уничтожению, или onStop(), который вызывается перед уничтожением. Один из примеров, когда onPause() и onStop() вызывается, а не этот метод, - это когда пользователь переходит от действия B к действию A: нет необходимости вызывать onSaveInstanceState(Bundle) для B, потому что этот конкретный экземпляр никогда не будет восстановлен Таким образом, система избегает вызывать его. Пример, когда вызывается onPause(), а не onSaveInstanceState(Bundle), - когда действие B запускается перед действием A: система может избежать вызова onSaveInstanceState(Bundle) для действия A, если оно не уничтожено в течение времени жизни B, так как состояние пользовательского интерфейса A останется без изменений.

Метод onSaveInstanceState() не вызывается, когда Activity заканчивается естественно, как при нажатии кнопки назад. Это ваше приложение само уничтожает Activity, Этот метод вызывается только в том случае, если ОС Android ожидает, что ему, возможно, придется прервать вашу деятельность, чтобы вернуть ресурсы.

Если Activity затем на самом деле убит Android, операционная система удостоверится, что вы получите вызов onRestoreInstanceState() а также передать тот же пакет, который вы использовали, чтобы сохранить состояние вашей деятельности в onSaveInstanceState() метод.

Из документов:

Этот метод вызывается до того, как действие может быть прекращено, чтобы, когда оно вернется через некоторое время в будущем, оно могло восстановить свое состояние. Например, если действие B запускается перед действием A, и в какой-то момент действие A прекращается для восстановления ресурсов, действие A будет иметь возможность сохранить текущее состояние своего пользовательского интерфейса с помощью этого метода, чтобы при возврате пользователя Для действия A состояние пользовательского интерфейса может быть восстановлено с помощью onCreate(Bundle) или же onRestoreInstanceState(Bundle),

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

Другими словами: убедитесь, что вы не забыли свои вызовы "super.onSaveInstanceState()", где это необходимо.

Другие вопросы по тегам