Главная » Разработка для Android » Подробнее о состояниях Активности

0

Пребывая  в «полноценном» состоянии,  между созданием и уничтоже- нием, объект Activity  может несколько  раз становится активным  и види- мым. Каждый такой переход сопровождается вызовом ранее описанных обработчиков. В этом разделе более подробно рассматривается каждое из состояний,  а также характерные  для них события.

Полноценное состояние. Активность пребывает в полноценном состоя- нии между первым вызовом метода onCreate и последним вызовом метода onDestroy. В некоторых ситуациях работа Активности может быть прервана без вызова onDestroy.

Используйте обработчик onCreate, чтобы инициализировать Активность, загружайте  пользовательский интерфейс,  размещайте ссылки на свойства класса, связывайте данные с элементами управления, создавайте  Сервисы и потоки. Метод onCreate принимает объект Bundle, содержащий состояние пользовательского интерфейса, сохраненное  в последнем вызове обработ- чика onSaveInstanceState. Для восстановления графического  интерфейса в его предыдущем состоянии нужно задействовать эту переменную: внутри onCreate или переопределяя метод onRestoreInstanceState.

Обратитесь  к переопределенному обработчику  onDestroy, чтобы очи- щать любые ресурсы, созданные в методе onCreate, и закрывать подключе- ния к таким внешним источникам, как сеть или базы данных.

В официальном руководстве  по написанию  эффективного кода для Android рекомендуется избегать создания объектов с коротким жизненным циклом. Быстрое появление и уничтожение объектов провоцирует допол- нительное срабатывание  сборщика мусора (garbage collector, или GC), что может повлиять на впечатления пользователя от работы приложения. Если ваша Активность регулярно выделяет  память  для одного и того же набора объектов, подумайте, можно ли переместить их создание в метод onCreate, который вызывается всего один раз за все время жизни объекта Activity.

Видимое состояние.  Активность считается  видимой  между вызовами методов onStart и onStop.  В таком состоянии она видна пользователю, но при этом может быть и частично  перекрытой и не реагировать  на ввод. Переходя  из фонового  режима  на передний  план и обратно, Активности могут несколько  раз менять  свое «видное»  состояние,  находясь  при этом в полноценной фазе жизненного цикла. Хотя обычно это не происходит, но в крайних  случаях Android может прервать работу видимой Активности без вызова метода onStop.

Обработчик onStop используется для приостановки анимации, потоков, отслеживания показаний датчиков,  запросов  к GPS,  таймеров,  Сервисов или других процессов,  которые  нужны  исключительно для обновления

пользовательского интерфейса. Нет смысла потреблять  ресурсы  (такты центрального  процессора или сетевой трафик) для обновления интерфей- са, в то время как он не виден на экране. Примените методы onStart или onRestart для возобновления или повторного запуска этих процессов, когда Активность опять станет видимой.

onRestart предшествует вызовам метода onStart (кроме самого первого). Используйте его для специальных действий, которые должны выполняться только  при повторном  запуске  Активности в рамках  «полноценного» со- стояния.

Методы  onStart/onStop также нужны для регистрации (и ее отмены) Широковещательных приемников,  которые  задействуются исключительно для обновления графического  интерфейса. Больше  о Широковещательных приемниках вы узнаете в главе 5.

Активное состояние. Оно начинается с момента вызова метода onResume и заканчивается при вызове onPause. В этом состоянии Активность находит- ся на переднем плане и может принимать пользовательский ввод. Прежде чем быть уничтоженным, объект Activity  способен несколько  раз входить в активное состояние и выходить из него, например при потере фокуса, ото- бражении новой Активности или когда устройство входит в режим ожидания. Пытайтесь размещать в методах onPause и onResume относительно быстрый и легковесный код, чтобы ваше приложение оставалось  отзывчивым при скрытии с экрана или выходе на передний план.

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

В большинстве реализаций класса Activity переопределяется как мини- мум метод onPause. Внутри него фиксируются несохраненные изменения, потому как после его выполнения работа Активности может прерваться без предупреждения. Исходя из архитектуры своего приложения, вы также мо- жете приостановить выполнение потоков, процессов или Широковещательных приемников, пока Активность не появится на переднем плане.

Метод onResume может быть довольно легковесным. Вам не нужно пере- загружать  состояние  пользовательского интерфейса внутри  него, так как эти функции возложены на обработчики onCreate и onRestoreInstanceState.

Используйте метод onResume для регистрации любых Широковещательных приемников или других процессов,  которые должны  приостанавливаться внутри обработчика  onPause.

Классы Activity в Android

Android SDK включает набор классов, наследованных от Activity.  Они предназначены для упрощения  работы с виджетами, которые часто встре- чаются в обычном пользовательском интерфейсе. Перечислим некоторые из них (наиболее  полезные).

MapActivity. Инкапсулирует обработку  ресурсов, необходимых  для поддержки  элемента MapView внутри Активности. Больше  информа- ции о классах MapActivity и MapView в главе 8.

ListActivity. Обертка  для класса Activity,  главная  особенность  кото- рой — виджет ListView, привязанный к источнику данных, и обработ- чики, срабатывающие при выборе элемента из списка.

ExpandableListActivity. То же самое, что и ListActivity, но вместо

ListView поддерживает ExpandableListView.

TabActivity. Позволяет разместить  несколько  Активностей или Пред- ставлений в рамках одного экрана, используя вкладки  для переклю- чения между элементами.

Резюме

В этой главе вы узнали, как разрабатывать надежные приложения, ис- пользуя слабосвязанные компоненты: Активности,  Сервисы, Источники данных, Намерения и Широковещательные приемники,  объединяемые программным манифестом.

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

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

Вы также познакомились с классом Application,  узнали, как его расши- рять, сделав тем самым управление  состоянием  приложения проще, равно как и передачу данных между его составными частями.

После вы более подробно рассмотрели объекты Activity и их роль в иерар- хии программных  компонентов,  узнали,  как создавать  новые Активности и изучили  их жизненный цикл. В частности, речь шла о переходах между

разными  состояниями и о том, как их отслеживать,  чтобы впечатление от использования приложения было целостным.

Под конец главы вы познакомились с некоторыми специализированны- ми классами, наследованными от Activity.

В следующей главе вы научитесь создавать пользовательские интерфей- сы с помощью разметки  и некоторых стандартных  виджетов. Узнаете, как расширять,  изменять  и группировать Представления, создавая специализи- рованные  виджеты.  Сможете  разработать свои собственные  уникальные элементы  интерфейса с чистого листа, познакомитесь с системой  меню, которую предоставляет Android.

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии