onSaveInstanceState не сохраняет мои значения (входной пакет onCreate всегда равен нулю) - PullRequest
14 голосов
/ 06 сентября 2011

Сохранение пакета (операция A):

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putString("test", "value");
    super.onSaveInstanceState(outState);
}

Переход к операции B;

startActivity(new Intent(getBaseContext(), B.class));

Возвращение к операции A:

startActivity(new Intent(getBaseContext(), A.class));

загрузить значение, которое я написал, для связывания в упражнении A:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

Log.d("MY", "saved instance is null"+ Boolean.toString(savedInstanceState == null));
}

Всегда возвращает saveInstanceState = null.Что мне здесь не хватает?

onRestoreInstanceState никогда не срабатывает, когда я возвращаюсь к основному виду деятельности

Ответы [ 6 ]

5 голосов
/ 06 сентября 2011

В вашем коде нет ничего плохого.Попробуйте повернуть устройство, когда вы работаете в режиме A. В журнале вы увидите следующее. Это означает, что ваш onSaveInstanceState () работает нормально:

saved instance is nullfalse

Вот выдержка из Android Developer Site , что может вас заинтересовать:

Методом обратного вызова, в котором вы можете сохранить информацию о текущем состоянии вашей активности, является onSaveInstanceState ().Система вызывает этот метод перед тем, как сделать действие уязвимым для уничтожения, и передает ему объект Bundle.Bundle - это место, где вы можете хранить информацию о состоянии активности в виде пар имя-значение, используя такие методы, как putString ().Затем, если система убивает процесс вашей активности, и пользователь возвращается к вашей активности, система передает Bundle в onCreate (), чтобы вы могли восстановить состояние активности, которое вы сохранили во время onSaveInstanceState ().Если информация о состоянии для восстановления отсутствует, то Bundle, переданный в onCreate (), имеет значение null.

Примечание. Нет гарантии, что onSaveInstanceState () будет вызван до того, как ваша деятельность будет уничтожена, поскольку существуют случаи, в которыхнет необходимости сохранять состояние (например, когда пользователь покидает вашу деятельность с помощью клавиши BACK, потому что пользователь явно закрывает действие).Если метод вызывается, он всегда вызывается перед onStop () и, возможно, перед onPause ().

4 голосов
/ 05 февраля 2012

Я получил это решение, имея:

intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

при перезапуске старого намерения с сохраненным состоянием из фона.Без этого флага я думаю, что когда вызывается startActivity, он создает новый экземпляр Activity вместо получения старого из стека.

2 голосов
/ 26 марта 2012

Если перейти к другому действию и вернуться назад, лучший способ - сохранить его в SharedPreference в методе onPause(), который обязательно должен выполняться при загрузке нового действия. С другой стороны, Activity, к значению можно обратиться в onCreate() путем доступа к общему предпочтению.

2 голосов
/ 06 сентября 2011

Вы должны сделать super.onSaveInstanceState (outState) перед добавлением в него контента.

0 голосов
/ 03 апреля 2019

Если ваше приложение не работает на Lollipop (API21) версии Android или новее, ваш

public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);

НЕ будет вызываться, так как его просто не существует в более ранних версиях платформы, чем 21. Для поддержкиДля устройств, предшествующих API 21, вместо вышеуказанного необходимо переопределить следующий метод:

public void onSaveInstanceState (Bundle outState);

Это будет работать и для API 21+, поэтому вам, разумеется, не нужно переопределять оба метода (если тольковы знаете, что вам нужно иметь дело с PersistableBundle, который предлагает новый).

(Скопировано, потому что это работает для меня) Источник: onSaveInstanceState не вызывается после поворота экрана

0 голосов
/ 18 декабря 2014

В случае, если вы хотите сохранить состояние вашего фрагмента во время вращения устройства, и вам интересно, что onSaveInstanceState никогда не вызывается:

  1. Проверьте, вызываете ли вы super.onSaveInstanceState(outState); во всех ваших onSaveInstanceState функциях.
  2. Убедитесь, что в вашем AndroidManifest.xml нет android:configChanges.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...