2015-01-29 9 views
2

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

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

Например навигации активность начинается активность А, как:

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

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

Так что я задал вопрос: почему активность A onSaveInstanceState не вызвана в конце и навигация к навигационной деятельности?

+0

Вы добавили configIhanges для Activity A в свой манифест? –

+0

нет Я не добавил никаких изменений в конфигурацию для этого действия и только что объявил, что активность – HemangNirmal

+0

@RahulGupta, что изменилось shoud, которое я сделал в mnifest для Activity A – HemangNirmal

ответ

6

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

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

из http://developer.android.com/reference/android/app/Activity.html:

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

Также method description for onSaveInstanceState() точно описывает ситуацию:

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

+0

T Я написал код, чтобы сохранить список Parcelable массива Parcelable Objects, и это не постоянные данные. Мне просто нужен ранее измененный список, когда я вернусь к этой активности. Фактически, при других действиях у меня есть кнопка «Добавить больше», которая перенаправляет снова эту активность – HemangNirmal

1

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

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

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

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

+0

Я написал код, чтобы сохранить список Parcelable массива Parcelable Objects, и это не постоянные данные. Мне просто нужен ранее измененный список, когда я вернусь к этой активности. Фактически, при других действиях у меня есть кнопка «Добавить больше», которая перенаправляет снова на это действие. – HemangNirmal

+0

Если данные не являются постоянными, т. Е. Вы не можете сохранить его в файле или совместно используемых префайлах и т. Д., То вызывающая активность (та, которая с кнопкой добавления) должны удерживаться в этом списке и передавать его как «Intent» extras при запуске деятельности списка просмотра. Это действие должно начинаться с 'startActivityForResult()', чтобы он мог передать измененный список обратно в вызывающую активность. –

0

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

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