когда вызывается onRestoreInstanceState?
Извините за мое непонимание, но я новичок в разработке android.
У меня есть приложение с активностью A и активностью B в нем, и я иду от активности A к активности B. Когда я оставил активность A, МетодonSaveInstanceState
был вызван, но когда я вернулся к активности A (из активности B в том же приложении), пакет в методе onCreate
был пуст.
Что я могу сделать, чтобы сохранить предыдущее состояние действия A? Я только хочу сохранить данные для приложения жизненный цикл.
Может ли кто-нибудь помочь мне с этим?Вот мой код для действия 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);
}
Вот мой код для действия B, Когда я нажимаю кнопку, чтобы вернуться к действию A:
public void onBack(View view)
{
NavUtils.navigateUpFromSameTask(this);
}
5 ответов:
Сохранение и восстановление состояния предназначено для сохранения текущих временных данных, которые устарели при выходе пользователя из приложения. Когда вы сворачиваете или оставляете действие, открывая следующее, оно может быть убито системой из-за нехватки ресурсов и перезапущено с
Таким образом, если вы начинаете новое действие спереди и возвращаетесь к предыдущему (то, что вы пытаетесь сделать), действие A может не быть убит (просто остановлен)и перезапущен, не будучи уничтоженным. Вы можете принудительно убить его и восстановить, установив флажокsavedInstanceState
, когда вы вернетесь к нему. Поэтому используйтеonSaveInstanceState()
только для сохранения данных сеанса минимизации-восстановления.Don't keep activities
в меню параметров разработчика.Если вы вызовете
finish()
или удалитеActivity
из списка последних задач, тоsavedInstanceState
не будет передано вonCreate()
, так как задача была очищена.Если значение должно быть постоянным, рассмотрите возможность использования
SharedPreferences.
Чтобы ответить на ваш вопрос, взгляните на Android doc: https://developer.android.com/reference/android/app/Activity.html#onRestoreInstanceState(android.os.Bundle)
Он говорит, что onRestoreInstanceState вызывается после метода onStart () в жизненном цикле действия.
Это происходит потому, что вы идете трудным путем. Если вы используете навигацию по кнопке "Назад" телефона по умолчанию, ваш
onCreate
получит пакет, переданный вам.Чтобы обойти эту проблему, я предлагаю вам сохранить ваше состояние в общих предпочтениях, а также резервную копию. Если пакет равен нулю, восстановите его из общих настроек.