Android: сохранение состояния во время жизненного цикла Android

Я имею в виду http://developer.android.com/reference/android/app/Activity.html .

У меня есть активность, которая может быть «прервана» пользователем, например, пользователь открывает меню, чтобы вызвать экран настроек. При вызове экрана предпочтений onSaveInstanceState(Bundle) вызывается, и я могу сохранить свои данные. Пока все в порядке. Но при нажатии кнопки onRestoreInstanceState(Bundle savedInstanceState) НЕ вызывается.

Итак, как я могу сохранить свое состояние? Должен ли я делать это при вызове нового вида деятельности? Но как?
Единственный способ, с помощью которого я могу думать, – сохранить состояние, передав состояние новой активности, ничего не делать с сохраненными данными, вернуть его в первую активность и восстановить состояние в onActivitResult . Но это означало бы, что я должен передавать данные назад и вперед, чтобы восстановить состояние. Не похоже, что это хорошее решение.

Наверное, плохой ответ, но уверены onRestoreInstanceState вы, что нужно onRestoreInstanceState ?

Точка пакета и onSaveInstanceState / onCreate с помощью bundle / onRestoreInstanceState должна сохранять временные данные для активности, находящейся в стеке истории, в случае, если активность должна быть убита для восстановления некоторой памяти. Если он убит, активность может быть восстановлена, как если бы она никогда не была убита, через onCreate / onRestonreInstanceState . Однако, если активность не была убита, нет необходимости восстанавливать ее временные данные – по-видимому, это так, как было.

В документации по Android стоит обратить внимание на то, что onSaveInstanceStae / onRestoreInstanceState не являются методами жизненного цикла , поэтому не гарантируется, что они будут вызваны во время переходов состояния жизненного цикла. Если вам нужно подключиться к определенным переходам жизненного цикла, взгляните на методы крюка жизненного цикла . Например, onResume вызывается, когда активность становится активностью переднего плана, а onPause вызывается, когда она больше не является onPause .

Android Lifecycle Picture

Взгляните на Основы применения , в частности эту часть:

В отличие от onPause() и других методов, обсуждавшихся ранее, onSaveInstanceState() и onRestoreInstanceState() не являются методами жизненного цикла. Они не всегда называются. Например, Android вызывает onSaveInstanceState() до того, как активность становится уязвимой для уничтожения системой, но не вызывает ее, когда экземпляр фактически уничтожается действием пользователя (например, нажатием клавиши BACK). В этом случае пользователь не ожидает возврата к активности, поэтому нет причин для сохранения его состояния.

Поскольку onSaveInstanceState() не всегда вызывается, вы должны использовать его только для записи состояния переходного процесса, а не для хранения постоянных данных. onPause() используйте onPause() для этой цели.

В принципе, любые постоянные данные должны быть записаны в вашем onPause() и прочитаны в onResume() . Ознакомьтесь с статьей хранения данных для способов сохранения данных.

Ваш ListView не должен быть очищен после возвращения с экрана Pref, если только Activity не была уничтожена, пока показывался экран Pref (в этом случае onCreate должен был быть вызван с сохраненным пакетом).

Сохраненное значениеInstanceState используется только тогда, когда действие было уничтожено и его необходимо воссоздать. В этом случае похоже, что ListActivity не был уничтожен.

Вы очищаете свой ListView вручную?

Intereting Posts
Разработка для iPhone / Android и WPF Аутентификация Facebook работает на эмуляторе, но не на физическом устройстве При использовании TalkBack, какой предпочтительный способ предупредить пользователя, когда содержимое TextView изменилось? File.mkdir () и mkdirs () создают файл вместо каталога Неудача тестов Android JUnit, не нарушая мой скрипт Ant, как я ожидаю? Добавить значок контекстного меню в android Формат андроида edittext для отображения пробелов после каждых 4 символов Android Junit Testing против стандартного тестирования Junit Не удалось запустить службу намерения GCM Автоматическое редактирование текста в android Импорт файла ant build.xml в Eclipse Экран не двигается правильно, когда клавиатура перемещается вверх – андроид Ошибка установки: INSTALL_FAILED_DEXOPT на устройстве Samsung S OnFling и multitouch – несколько указателей MotionEvent Предварительный просмотр камеры показывает нежелательные фрагменты только на Android 4.2.2 (S4, полный экран HD)