Android Activity Lifecycle: восстановление приложения после уничтожения - проблема дизайна - PullRequest
5 голосов
/ 19 мая 2011

atm Я пытаюсь заставить мое приложение работать с "onSaveInstanceState" и "onRestoreInstanceState", но чем глубже я копаю, тем больше проблем возникает.

Так, например, я только что понял, что восстановление одного действия с помощью этих двух функций довольно бесполезно. Потому что, если я нажму кнопку «Назад» и вернусь к предыдущему действию, он не получит свой пакет «saveInstanceState», а полностью восстановится.

Есть ли способ восстановить целое приложение вместо одного действия? Или это просто странный дизайн, и мне даже не стоит восстанавливать одно занятие?

С уважением, медузы

Редактировать: хорошо, глупый я ...

пакет, полученный моей основной деятельностью, был не нулевым, а только в "onRestore ...". В «onCreate» это было действительно ноль, но это было верно все время. (Независимо от того, вернулся ли я с другого занятия после убийства или нет, например)

Так что теперь я в замешательстве по-другому: я проверял это раньше в другом упражнении, и там, в пакете saveInstanceState "onCreate" и "OnRestoreInstanceState", где то же самое! Это просто случайно или что-то особенное из основной деятельности? (Пробовал также разные режимы запуска, но они не оказали никакого влияния).

1 Ответ

8 голосов
/ 19 мая 2011

Так, например, я только что понял, что восстановление одного действия с помощью этих двух функций довольно бесполезно.

Нет, это очень полезно при правильном использовании.

Потому что, если я нажму кнопку "Назад" и вернусь к предыдущему действию, эта не получит свой пакет "saveInstanceState" и вместо этого будет полностью воссоздана.

Нет, это не так.

Если он уже существует и находится в заднем стеке, он будет запущен (onStart()) и возобновлен (onResume()), но он не будет создан. Если Android пришлось закрыть предыдущее действие (например, из-за нехватки памяти), будет создано предыдущее действие (onCreate()) и ему будет передан Bundle, содержащий данные, которые он заполнил в onSaveInstanceState().

Единственный способ, которым эти утверждения не будут верными, - это если вы манипулируете обработкой кнопки НАЗАД.

Есть ли способ восстановить целое приложение вместо одного действия?

номер

Или это просто странный дизайн, и мне даже не стоит беспокоиться о восстановлении одного занятия?

Вы наверняка должны восстановить одно действие.

onSaveInstanceState() используется для двух сценариев:

  1. Если пользователь изменяет конфигурацию (например, поворачивает экран), ваша деятельность будет уничтожена и воссоздана. Вы используете onSaveInstanceState() для передачи данных из старого экземпляра действия в новый.
  2. Сценарий кнопки НАЗАД, который я описал выше.

Я проверял это раньше в другом упражнении, и там, в пакете saveInstanceState "onCreate" и "OnRestoreInstanceState", где то же самое!

Конечно. Они должны быть одинаковыми. Если действие создается полностью с нуля, onCreate() будет передано null и onRestoreInstanceState() не будет вызвано. Но если есть состояние экземпляра, это состояние (Bundle) будет передано как onCreate(), так и onRestoreInstanceState().

Это просто случайно или что-то особенное из основной деятельности?

Ни. Они должны быть одинаковыми.

...