Запуск явлений

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

В данном уроке мы рассмотрим наиболее важные из этих методов и покажем как создается экземпляр явления.

Функции обратного вызова жизненного цикла

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

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

схема жизненного цикла

Рисунок 1.Упрощенная иллюстрация жизненного цикла в виде пирамиды.

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

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

Далее мы рассмотрим различные ситуации, в которых явления переключается между состояниями, показанными на рисунке 1. Однако, только три состояния могут быть статическими, в которых явление может находиться длительное время:

Возобновлено
В этом состоянии явление находится на переднем плане и позволяет пользователю с ним взаимодействовать. (Его еще называют “запущенное состояние”)
Приостановлено
В данном состоянии явление частично скрыто другим явлением, которое имеет полупрозрачный фон или не закрывает весь экран целиком. В этом состоянии явление не может обрабатывать запросы пользователя и выполнять какой-либо программный код.
Остановлено
В данном состоянии явление полностью скрыто и не видимо для пользователя. Все данные при этом сохраняются, однако явление не может выполнять какой-либо код.

Остальные состояния (создано и запущено) промежуточные и система быстро перемещается на следующие. Так после вызова onCreate() быстрое вызывается onStart(), который также быстро переходит на onResume().

Всё это базовые элементы жизненного цикла явления. Далее мы подробнее рассмотрим некоторые особенности его поведения.

Объявление главного явления

Когда пользователь щелкает по иконке вашего приложения, система вызывает метод onCreate() явления, которое вы объявили главным. Это явление, которое является точкой входа в пользовательский интерфейс приложения.

Вы можете указать какое из явлений будет главным в файле манифеста AndroidManifest.xml, который находится в корневой директории проекта.

В файле манифеста главное явление должно содержать раздел <intent-filter>, включающий действие MAIN и категорию LAUNCHER. Например:

Примечание:Если вы используете Android Studio, данный фильтр будет автоматически прописан в файле манифеста.

Если один из элементов MAIN в качестве действия или LAUNCHER в качестве категории не будет указан, иконка вашего приложения не появится в списке программ.

Создание экземпляра явления

Часто приложения состоят из нескольких явлений, для выполнения различных действий. Система всегда создает экземпляр любого явления, вызывая метод onCreate().

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

Ниже приведен пример реализации метода onCreate(), в котором подключается и настраивается XML разметка интерфейса пользователя и определяются некоторые переменные:

Внимание:Используйте SDK_INT только на Android 2.0 (API 5) и выше. Использование в более старых версиях могут вызывать исключение.

После выполнения onCreate() система вызывает методы onStart() и onResume().Помните, что явление никогда не задерживается в состоянии Создано или Запущено. Технически явление становится видимым уже при вызове onStart(), однако состояние быстро меняется на Возобновлено и явление будет находиться в этом состоянии до тех пор, пока какое-либо событие (например телефонный вызов или отключение экрана устройства) не заставит его измениться.

В следующих уроках мы рассмотрим чем могут быть полезны методы onStart() и onResume().

Примечание: метод onCreate() содержит параметр savedInstanceState, который обсуждается в уроке Пересоздание явления.

схема цикла создания явления

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

Уничтожение явления

Жизнь явления начинается с вызова метода onCreate(), а уничтожение явления сопровождается вызовом метода onDestroy(). Система вызывает этот метод последним перед удалением явления из оперативной памяти.

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

Примечание:перед вызовом onDestroy(), система всегда вызывает onPause() и onStop(), за исключением случая, когда был вызван finish() внутри метода onCreate(). Такой подход применяется например в том случае, когда явление является временным и используется для запуска другого явления.

Добавить комментарий