Сохранение состояния активности в onPause

У меня есть переменная, которую я успешно сохранил и восстановил с помощью onSaveInstanceState

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState); // the UI component values are saved here.
    outState.putDouble("VALUE", liter);
    Toast.makeText(this, "Activity state saved", Toast.LENGTH_LONG).show();
}

Но это работает только в случае уничтожения активности. Я хочу сохранить одну и ту же переменную, переопределив метод onPause() и вернувшись, когда действие не будет приостановлено, все идеи о том, как это сделать, очень ценятся.

Ответы

Ответ 1

Как вы обнаружили, onSaveInstanceState полезен только в ситуациях, когда вам нужно воссоздать один и тот же так называемый "экземпляр" Activity после того, как он был уничтожен ОС, обычно потому, что он слишком далеко сзади чтобы оставаться в живых под давлением памяти.

Сохранение ваших данных в onPause действительно является способом перехода на постоянство, которое длится не одно выполнение вашего действия. Чтобы получить эту работу, у вас есть несколько вариантов, в том числе:

  • Общие настройки
  • Файлы
  • Базы данных
  • Поставщики контента

Я предлагаю прочитать эту документацию, чтобы узнать больше о каждой из этих опций:

http://developer.android.com/guide/topics/data/data-storage.html

Ответ 2

Вы можете просто назначить переменную foo члену класса mFoo в onPause, если вы также сохраните mFoo в пакете состояния в onSaveInstanceState. То же самое касается сценария восстановления.

Ответ 3

Если вы решите сохранить состояние Activity в Shared Preferences, вы можете проверить компонент GNStateManager библиотеки, которую я написал, чтобы было легко хранить и извлекать необходимые поля активности, отмеченные аннотами @GNState. Он прост в использовании. Другие состояния объекта одноэлементного класса также могут быть сохранены. См. Здесь информацию об установке и использовании: https://github.com/noxiouswinter/gnlib_android/wiki/gnstatemanager