Сегодня Android вездесущ. Телефоны, планшеты, смарт-часы, устройства IoT и т. д. – все они работают на базе Android. 83,4% мировых поставок смартфонов приходится на Android. И эта тенденция может не уменьшиться в ближайшее время. Таким образом, изучение Android, хотя и с опозданием, кажется достаточно хорошим вложением времени и усилий. Итак, давайте углубимся в основы Android в этой серии 30 Days of Android. Это охватывает основы системы Android и различных компонентов приложения.

Android - это (вроде) Linux:

  • Операционная система Android построена на ядре Linux. По сути, Android — это многопользовательская операционная система Linux.
  • Каждое приложение — это отдельный пользователь с уникальным идентификатором пользователя.
  • Каждое приложение и его компоненты выполняются в отдельном процессе с собственной изолированной программной средой виртуальной машины.
  • Система Android берет на себя ответственность за обработку и управление всеми этими приложениями и связанными с ними ресурсами.
  • Он запускает каждый процесс как отдельный объект, строго контролируя доступ к данным приложений, а также к общесистемной информации.

Компоненты Android-приложения:

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

  • Активность: это компонент пользовательского интерфейса. Здесь пользователь будет взаимодействовать с приложением. Один экран в потоке приложения вместе с состоянием этого экрана с пользовательским интерфейсом представляет действие. Это независимые части приложения, и рабочий процесс может быть определен в любом порядке или как отдельная часть. Будучи независимыми, компоненты могут вызываться другим приложением (не напрямую, а через систему Android), как мы видим, что приложение «Камера» вызывается из приложения Gmail. Поскольку Android привязывает действия к процессу на основе того, что происходит на экране или совсем недавно использовалось, он решает, следует ли продолжать выполнение процесса или держать его наготове, когда это необходимо. Это также средство для связи между несколькими приложениями по мере необходимости. Функционально мы создаем активность, наследуя от класса Activity.
  • Сервис: похож на демона. Это интерфейс приложения через него, который работает в фоновом режиме. Ему не нужен экран пользовательского интерфейса. Некоторый опрос сервера, загрузка или некоторая очистка — хорошие примеры компонентов, работающих в фоновом режиме. Даже в этих фоновых задачах, таких как загрузка, требуется способ указать пользователю прогресс. Есть и другие, временная недоступность которых может не повлиять на работу пользователей. Кроме того, некоторые сервисы предоставляют API другим приложениям. Эти службы (называемые связанными службами) привязаны к системе Android по мере необходимости. Это очень универсальный способ реализации некоторых функций. Он реализован как подкласс класса Service.
  • Приемник широковещательной рассылки: это компонент, который регистрируется для общесистемных широковещательных передач из системы Android. Вот как мы можем доставлять события в приложение вне его обычного пользовательского потока. Приложение также может отправлять трансляции другим. Они являются подклассами класса BroadcastReceiver.
  • Поставщик контента: управляет набором данных, которые можно поместить в постоянное хранилище данных, к которому может получить доступ приложение. Он основан на схеме URI и может позволить другим приложениям запрашивать данные, а приложению управлять своими данными. Схема поставщика контента может позволить другим приложениям также изменять свое хранилище данных. После назначения пространства имен URI приложение не нужно запускать, чтобы оно оставалось постоянным. Примером может служить список контактов в приложении «Контакты». Подкласс класса ContentProvider.

Намерения

Намерения — это асинхронные сообщения, которые связывают компонент (из того же или другого приложения) с компонентом. Это способ, которым один компонент запрашивает действие у другого, и привязка происходит во время выполнения. Он создается как объект класса Intent. Намерения бывают двух типов: явное намерение: указывает конкретный компонент, который нужно активировать, и неявное намерение: указывает конкретный тип компонента, который нужно активировать.

Но намерения используются для вызова 3 типов компонентов: действий, служб и широковещательных приемников. Для поставщиков содержимого поставщики содержимого активируются путем вызова методов объекта ContentResolver, который действует как абстракция и интерфейс с поставщиком содержимого.

Для действий и служб намерения определяют действия, которые необходимо выполнить, или некоторые необходимые данные. Для широковещательных приемников намерением будут в основном определенные строки, которые отправляются как широковещательные.

Примеры вызова компонентов

  • Для действий вызов происходит путем отправки Intent в startActivity() или startActivityForResult(). Это также может иметь некоторую новую информацию для отправки в действие.
  • Для сервисов мы можем передать Intent в startService() или bindService().
  • Мы также можем запланировать некоторые действия (или услуги) с помощью объектов JobScheduler.
  • Для вызова широковещательных приемников мы можем отправить намерения в sendBroadcast().
  • Чтобы вызвать поставщиков контента, мы можем использовать объект ContentResolver и вызывать для него методы (такие как query(), update() и т. д.).

AndroidManifest.xml

Чтобы запускалось и работало приложение, система должна об этом знать. Эта информация является частью файла манифеста приложения AndroidManifest.xml. Это похоже на файл регистрации, в котором объявляются все компоненты приложения и указываются разрешения и функции, необходимые для приложения, а также указываются библиотеки для связывания приложения. Этот файл находится в корне каталога проекта приложения.

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

Вывод

Это основные блоки приложения, и мы можем абстрагировать части приложения в любой из вышеперечисленных блоков. Хотя я сказал, что любое приложение может получить доступ к любому компоненту других приложений, они не могут сделать это напрямую, поскольку каждая песочница не имеет доступа к другим. Они активируют чужие компоненты, отправляя асинхронные сообщения, называемые намерениями, в систему, которая, в свою очередь, активирует компоненты в пространстве процесса другого приложения, частью которого является компонент. Таким образом, компонент приложения A, хотя и вызывается приложением B, выполняется в процессе, связанном с приложением A.

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