Любопытный момент - наподобие небольшого открытия сделали с товарищем, совместно делая приложение (игрушку). Некий абстрактный класс представляет собой наследника Activity (назовём его MyActivity). Реализует некие действия, отображает пользователю разметку, пользователь взаимодействует с элементами разметки и.. поворачивает в пространстве телефон (можно сэмулировать из-под Eclipse'а комбинацией Ctrl-F11 в Винде), что же происходит?!?!
Разметка перестраивается и приложение через мгновения неожиданно валится!.. Смотрим лог.
NullPointerException. Некий метод в другом классе, берущем объекты из MyActivity уже ссылается на нечто пустое. Что же произошло? Все объекты удалились, GC освободил память под дальнейшую работу.
Логируем буквально все callback-методы нашей рабочей активити:
- задаем сообщение в лог о создании/пересоздании активити. onCreate(), тобишь;
- задаем сообщение в лог об уничтожении нашей активити. onDestroy(), надо думать;
- ... лог всего, что происходит при переходах, повороте экрана.
Портретный режим. Производим некие действия..
Начальный лог показывает создание данного Activity
Приводим здесь результаты отслеживания поворота и лога сообщений в DDMS:
Повернули экран!
Наблюдаем наш лог. Callback-методы onDestroy-onCreate сработали.
А произошло вот что. Заново сработал метод Activity - onCreate()! Вот это да..Оказывается, Activity удаляется при смене конфигурации, заново создается, стартуется, вообщем идет полный цикл жизни Activity от начала.
Это теоретически и документально подтверждается в свеже-задаренной мне книге у Рето Майера:
" При изменении языка, региона или аппаратной конфигурации Android прерывает работу всех приложений и затем запускает из повторно, перезагружая значения из ресурсов. "И тут же указывают возможные пути обработки или даже избегания такого явления:
" Чтобы заставить Activity отслеживать изменения конфигурации при выполнении программы, добавьте ее узел в манифесте атрибут android:condigChanged, указав, какие именно события хотите обрабатывать:Надеюсь, кому-то это было в новость и сильно облегчит понимание логики работы android-приложения. Мотайте на ус, ребятки-девчатки.
- orientation - положение экрана изменено с портретного на альбомное (или наоборот);
- keyboardHidden - клавиатура выдвинута или спрятана
- fontScale - пользователь изменил предпочтительный размер шрифта
.. "