Сначала позвольте мне объяснить, что такое файл AIDL:
Каждое Android-приложение работает в своем собственном процессе. Таким образом, одно приложение не может получить доступ к области памяти другого приложения ИЛИ другими словами, один процесс не может получить доступ к памяти другого процесса. Поэтому, чтобы это произошло, нам нужно разложить их объекты на примитивы, которые операционная система сможет понять и маршалировать объекты через эту границу для вас.
Код для такой сортировки утомительно писать, поэтому Android обрабатывает его для вас с помощью AIDL, что означает, что межпроцессное взаимодействие (IPC) может быть легко обработано через AIDL. Для лучшего понимания рассмотрите это как связь между клиентскими и серверными приложениями. Клиент отправляет запрос, а сервер отвечает обратно.
Этот учебник объяснит это межпроцессное взаимодействие простым способом с ясным примером и исходным кодом. Чтобы упростить наш пример, давайте возьмем запрос на расчет. Клиентское приложение получит от пользователя два номера и отправит на сервер приложение. Серверное приложение выполнит сложение этих чисел и вернет сумму клиентскому приложению.
AIDL может быть достигнуто после следующих шагов:
Определите интерфейс AIDL - AIDL, который взаимодействует с вашими приложениями.
Реализация интерфейса - вышеупомянутый интерфейс будет реализован в службе, чтобы клиенты могли получить доступ.
Предоставьте интерфейс клиентам - Чтобы предоставить интерфейс для вашего сервиса, расширьте Service и внедрите onBind ()
Определить интерфейс AIDL
Этот файл определяет интерфейс программирования с сигнатурой метода. Интерфейс AIDL должен быть определен в файле .aidl. В нашем случае это IAdd.aidl с кодом ниже.
IAdd.aidl
package com.example.android_additionservice;
interface IAdd
{
int add(int num1, int num2);
}
Когда мы создаем наше приложение, Android SDK генерирует файл .java, соответствующий этому файлу .aidl, с тем же именем, что и IAdd.java. Сгенерированный интерфейс включает в себя подкласс с именем Stub, который является абстрактной реализацией его родительского интерфейса и объявляет все методы из файла .aidl
Реализация интерфейса (AdditionService.java)
Чтобы реализовать интерфейс, сгенерированный из .aidl, расширьте сгенерированный интерфейс Binder и реализуйте методы, унаследованные от файла .aidl. В нашем случае нам нужно реализовать метод add здесь. Теперь mBinder является экземпляром класса Stub (Binder), который определяет интерфейс RPC для службы.
private final IAdd.Stub mBinder = new IAdd.Stub() {
@Override
public int add(int num1, int num2) throws RemoteException {
return (num1 + num2);
}
};
Предоставление интерфейса для клиентов (AdditionService.java)
После реализации интерфейса нам нужно предоставить его другим приложениям для доступа к нему. Для которого расширяют службу и реализуют onBind () для возврата экземпляра вашего класса, который реализует сгенерированную заглушку.
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return mBinder;
}
AdditionService.java
package com.example.android_additionservice;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import com.example.android_additionservice.IAdd;
public class AdditionService extends Service {
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return mBinder;
}
// IAdd definition is below
private final IAdd.Stub mBinder = new IAdd.Stub() {
@Override
public int add(int num1, int num2) throws RemoteException {
// TODO Auto-generated method stub
return (num1 + num2);
}
};
}
Служба регистрации в AndroidManifest.xml
Поскольку серверное приложение является службой, давайте зарегистрируем это в файле AndroidManifest.xml.
Вот и все .. Мы закончили с серверным приложением.