Когда вызывается onRestoreInstanceState?
Извините за мое непонимание, но я новичок в развитии Android.
У меня есть приложение с активностью A и активностью B в нем, и я перехожу от активности A к активности B. Когда я покинул активность A, был вызван метод onSaveInstanceState
, но когда я вернулся к активности A (из активность B в том же приложении), пакет в методе onCreate
был нулевым.
Что я могу сделать, чтобы сохранить активность Предыдущее состояние? Я хочу хранить данные только для срока службы приложения.
Может кто-нибудь мне помочь?
Вот мой код для Activity A:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null)
{
Log.v("Main", savedInstanceState.getString("test"));
}
else
{
Log.v("Main", "old instance");
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState)
{
Log.v("Main", "save instance");
savedInstanceState.putString("test", "my test string");
super.onSaveInstanceState(savedInstanceState);
}
public void buttonClick(View view)
{
Intent intent = new Intent(this, Activity2.class);
startActivity(intent);
}
Вот мой код для Activity B, когда я нажимаю кнопку, чтобы вернуться к активности A:
public void onBack(View view)
{
NavUtils.navigateUpFromSameTask(this);
}
Ответы
Ответ 1
Сохранение и восстановление состояния предназначено для сохранения текущих временных данных, которые устарели, когда пользователь выходит из приложения.
Когда вы сворачиваете или покидаете действие, открывая следующий, он может быть убит системой из-за нехватки ресурсов и перезапущен с помощью savedInstanceState
, когда вы вернетесь к нему. Поэтому используйте onSaveInstanceState()
только для сохранения данных сеанса с минимальным восстановлением.
Итак, если вы начнете новую активность перед собой и вернетесь к предыдущей (то, что вы пытаетесь сделать), активность A может не быть убита (просто остановлена) и перезапущена без разрушения. Вы можете принудительно убить его и восстановить, установив Don't keep activities
в меню параметров разработчика.
Если вы вызываете finish()
или удаляете Activity
из недавнего списка задач, savedInstanceState
не будет передан в onCreate()
, поскольку задача была очищена.
Если значение должно быть постоянным, рассмотрите возможность использования SharedPreferences.
Ответ 2
Чтобы ответить на ваш вопрос, посмотрите на документ android: https://developer.android.com/reference/android/app/Activity.html#onRestoreInstanceState(android.os.Bundle)
В нем говорится, что onRestoreInstanceState вызывается после метода onStart() в жизненном цикле активности.
Ответ 3
Это происходит потому, что вы плавно переходите. Если вы использовали навигацию по умолчанию по умолчанию, ваш onCreate
получит переданный пакет.
Чтобы обойти эту проблему, я предлагаю вам сохранить ваше состояние в общих настройках, а также создать резервную копию. Когда пакет равен null, восстановите его из общих настроек.
Ответ 4
После onStart(), который после onCreate()
Ответ 5
В этом случае я использовал флаг и SharedPreferences. Это должно работать, и когда вы меняете ориентацию экрана.