Воскресенье, 17 Август 2014 04:19

Взаимодействие компонентов в Andoird

Автор 
Оцените материал
(1 Голосовать)

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

Android основан на ядре Linux и является многопользовательской системой. Для каждого Android приложения в операционной системе предусмотрен отдельный пользователь, своя собственная виртуальная машина, а также процесс, в котором исполняется данное приложение. Таким образом производится разделения пространств (исходный код, ресурсы, файлы) отдельных приложений, одно приложение не имеет доступ к пространству другого приложения. Однако, в системе предусмотрены пути, по которым приложение может делиться своими данными с другими приложениями, а также получать доступ к системным службам.

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

Активность (Activity). Активность представляет собой единичный экран приложения. Одна из активностей помечается как основная, появляющаяся на экране при запуске приложения.

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

Контент провайдер (Content provider). Организует управление общедоступными данными, такими как список контактов, документы, поисковые запросы. Через контент провайдеров другие приложения могу запрашивать и изменять эти данные.

Приемник широковещательных сообщений (Broadcast receiver). Это компонент, отвечающий на широковещательные системные сообщения. К таковым относятся: выключении экрана (переход устройства в режим ожидания), изменение ориентации экрана (альбомная или портретная), низкий заряд батареи. Приложения также могут отправлять свои широковещательные запросы, например сообщение о завершении фонового скачивания какого-либо файла. Приемник также может создавать уведомления (Notifications) на панели статуса.

Отличительной особенностью операционной системы Android является возможность компонентов одного приложения запускать компоненты другого приложения. Так, если пользователю необходимо получить фотографию с камеры, то возможно в системе уже есть приложение способное сделать это. Вместо того, чтобы разрабатывать собственный компонент, происходит обращение к уже готовому компоненту другого приложения. Такой компонент будет запущен в отдельном процессе, дабы придерживаться разделения пространств между приложениями.
Выполнение приложения, а также его взаимодействия с компонентами других приложений производится в рамках задачи (Task). Задача формируется при первоначальном запуске приложения из меню или домашнего экрана. В случае, если при использовании приложения пользователь возвращается на домашний экран, задача, в контексте которого выполняется данное приложение, переходит в фоновый режим. Далее пользователь может начать новую задачу путем запуска еще одного приложения. К задачам висящим в фоне пользователь может вернуться через экран недавних приложений (recent apps), при этом текущая задача, опять же, перейдет в фоновый режим.
Каждая задача имеет собственный стек активностей, с которыми взаимодействовал пользователь при работе с программой. Данный стек хранит активности по принципу LIFO (последний вошел, первый вышел), по нажатию аппаратной кнопки Назад последняя добавленная активность будет взята из стека и выведена на экран.

Взаимодействие между активностями, сервисами и приемниками широковещательных сообщений производится через специализированный объект - намерение (Intent). В данном объекте указывается конкретный компонент, либо категория компонентов, с которыми намеревается взаимодействовать искомый компонент, а также необходимые данные. Взаимодействие компонентов одного предложения производится через так называемые явные намерения (Explicit intents), с указанием класса конкретного компонента. Обращение к компонентам других приложений производится с помощью неявных намерений (Implicit intents), для которых указывается категория, тип действия, а также данные. При выполнении неявных намерений система ищет компоненты среди установленных приложений удовлетворяющие указанным требованиям, если таких приложений обнаружится несколько, то система предоставит пользователю выбор. Как следует из выше сказанного, операционной системой уже определен ряд категорий и типов действий, однако ничто не мешает определить свои собственные категории.
Компоненты вашего приложения также могут отвечать на неявные намерения других приложений, это достигается за счет указания фильтра намерений (intent filter) для каждого вашего компонента, в данном фильтре отмечаются категории и типы действий, на которые может ответить ваш компонент.

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

Прочитано 1043 раз
Evgen

Бла бла бла

Сайт: www.facebook.com/joltd