2010-06-13 2 views
2

У меня есть простое приложение с 3 деятельности:Жизненный цикл простого приложения Android

  • первый содержит окно поиска, который вызывает веб-службы и показать результаты (рестораны) ниже в ListView
  • при щелчке ресторана начинается запуск другого мероприятия, показывающего описание ресторана и кнопку «показать карту»
  • при нажатии кнопки «показать карту», ​​угадайте, какая карта отображается в третьем действии.

Все данные загружаются в первую активность веб-службой (описания и координаты ресторана), а данные, необходимые для каждого вида деятельности, передаются в комплекте с использованием intent.putExtra.

Теперь все кажется плавным, если нажать на кнопку back button (например, нажатие на кнопку «Назад» с карты возобновляет действие restaurant description со всем набором данных правильно), в то время как я еще ничего не сделал о жизненном цикле.

Почему? Все переменные сохраняются автоматически? Должен ли я использовать onSaveInstanceState() и onRestoreInstanceState()?

Благодаря

июл

+0

Деятельность закрыты, когда телефон требуется больше памяти, как правило, это происходит немного дольше вы оставить ваше приложение. – Pentium10

+0

нормально, поэтому я должен использовать onSaveInstanceState() для сохранения данных, не так ли? – jul

ответ

0

Когда новая деятельность B начинается поверх другой активности А, активность А, не будет уничтожен по умолчанию, он становится остановлен и после того, что вы просто возобновить. Если система нуждается в ресурсах, она может уничтожить прекращенную активность. Есть хороший граф here, который действительно объясняет жизненные циклы компонентов.

+0

Сохраняется ли пакет с использованием onSaveInstanceState в onCreate, если активность была уничтожена? – jul

+0

Да, он передается в onCreate и onRestoreInstanceState. – Rabas

0

Когда ваша деятельность остановлена, объект Activity сохраняется в памяти и вызывается при возобновлении действия. Вам не нужно повторно инициализировать компоненты, созданные во время любого из методов обратного вызова, ведущих к состоянию возобновления. Система также отслеживает текущее состояние для каждого представления в макете, поэтому, если пользователь вводит текст в виджет EditText, этот контент сохраняется, поэтому вам не нужно его сохранять и восстанавливать.

Даже если система уничтожает вашу активность во время ее остановки, она по-прежнему сохраняет состояние объектов View (например, текст в EditText) в Bundle (blob пар ключ-значение) и восстанавливает их, если пользователь перемещается назад к тому же экземпляру активности).

http://developer.android.com/training/basics/activity-lifecycle/stopping.html

По умолчанию система использует состояние экземпляра Bundle для сохранения информации о каждом объекте View в макете деятельности (например, текстовое значение, введенное в объект EditText). Итак, если ваш экземпляр активности уничтожен и воссоздан, состояние макета восстанавливается в прежнее состояние без какого-либо кода, требуемого вами. Однако в вашей деятельности может быть больше информации о состоянии, которую вы хотите восстановить, например, переменные-члены, отслеживающие прогресс пользователя в активности.

Примечание. Чтобы система Android могла восстановить состояние представлений в вашей деятельности, каждое представление должно иметь уникальный идентификатор, предоставленный атрибутом android: id.

Чтобы сохранить дополнительные данные о состоянии активности, вы должны переопределить метод обратного вызова onSaveInstanceState().

http://developer.android.com/training/basics/activity-lifecycle/recreating.html