Что такое AIDL. Пример работы с AIDL в Android

Что такое AIDL в Android? Описание и пример использования

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

Если вы хотите понимать полную картину того, как работают службы, то посмотрите предыдущие материалы перед прочтением этой статьи.

Что такое AIDL в Android?

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

Как работает AIDL?

AIDL поддерживает обработку данных используя Parcelable. Все происходит в механизме IPC между двумя различными приложениями.

Использование AIDL через IPC на простом примере

Предположим, у нас есть два андроид приложения: AppServer будет выполнять функции удаленного сервера, на котором запущена служба AIDL и приложение AppClient — собственно клиент, который посылает запросы к этому удаленному серверу. Что делает AIDL служба? Она получает какие-то данные от клиента, выполняет обработку и возвращает ответ/результат клиенту.

В этой статье мы рассмотрим AIDL на следующем примере:

Условная сложная задача: сложить два числа.

Схема работы: с помощью приложения-клиента отправляем два числа службе AIDL и получаем в ответ результат обработки.

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

Пример работы с AIDL в Android

Для связи между двумя различными приложениями или процессами нам нужно создать файл AIDL в том же пакете внутри каждого из приложений в этом нам поможет Android Studio, которая умеет это делать из коробки.

Идем в Android Studio и создаем 2 приложения с названиями AppServer и AppClient.

Начнем с AppServer.

Смените вид проекта с Android на Project:

Android to Project view

Создайте файлик AIDL с именем ISumNumsAIDL с помощью команды: New -> AIDL -> AIDL file

New AIDL file

Теперь создадим AidlService, который нужно наследовать от класса Service.

Как видим, в методе onBind мы с помощью stub’а (заглушки) реализуем наш AIDL интерфейс.

Stub — это класс, который реализует удаленный интерфейс таким образом, что вы можете использовать его, как если бы он был локальным. Он обрабатывает маршалинг данных и отправку/получение из удаленной службы. Термин «Stub» или «заглушка» обычно используется для описания этой функции в других методах RPC (COM, Java RMI — программный интерфейс вызова удаленных методов и т.д.).

Теперь в файле build.gradle на уровне приложения добавьте следующий код перед закрывающей скобкой блока android {}:

Этим мы указали сборщику проекта, что AIDL файлы находятся в пакете aidl папки main.

Также не забудьте описать сервис в файле AndroidManifest.xml внутри тега application:

На этом работа с приложением AppServer закончена. Мы всего лишь создали AIDL и Android сервис, который его реализует. Приступим к реализации приложения-клиента AppClient.

Создание приложения-клиента для AIDL сервиса

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

Для этого создайте такой же aidl файл в таком же пакете, как и в «приложении-сервере». Структура проекта должна выглядеть следующим образом:

Структура приложения-клиента

Важно! Также в файле build.gradle на уровне приложения не забудьте добавить sourceSets для aidl точно также, как мы делали это в первом приложении.

Теперь нам нужно связать наше приложение и сервис с помощью ServiceConnection. В активности приложения-клиента проинициализируем наш ISumNumsAIDL интерфейс в методе onServiceConnected и при старте MainActivity свяжем его с помощью bindService с AIDL сервисом на стороне «приложения-сервера».

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

Накидаем простенькую форму для ввода чисел с кнопкой отправки:

Наша MainActivity выглядит так:

Теперь возьмите свое Android устройство или запустите эмулятор и установите сначала «приложение-сервер», чтобы запустить службу для работы с AIDL, а затем «приложение-клиент». Результат работы:

AIDL Service Android IPC
AIDL Client Android IPC

Как видим, у нас получилось связаться с сервисом, отправить данные и получить результат обработки.

Это был простой пример работы с AIDL в Android. Проекты приложений для Android Studio вы найдете здесь.

Следите за обновлениями сайта в соц. сетях и по email.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *