Вступление
Привет! Я собираюсь рассказать о парламентских беседах Android. Что я имею в виду под этим? Я имею в виду IPC (межпроцессное взаимодействие), которое происходит внутри системы Android. Мы собираемся использовать AIDL для так называемого “разговора”. Я объясню лучше и глубже в этой статье.
Мы все это знаем!
Почему это совершенно новый пост? Потому что речь идет не о IPC компонентов внутри одного приложения для Android. Речь идет о взаимодействии двух разных приложений. Большинство людей согласны с тем, что понять Спид довольно легко. Но, есть высказывание (мое), "Если вы понимаете интерфейсы в ООП, вы поймете AIDL!"
. Что ж, давайте посмотрим, что на самом деле означает это высказывание, в деталях.
Помощник отодвинул засов.
Язык определения интерфейса Android (AIDL) – это то, что вы каждый раз используете в Google AIDL. Это не объясняет, что это такое на самом деле. Позвольте мне объяснить! AIDL – это реализация Android для обеспечения межпроцессной связи (IPC) между компонентами Android. Погружаясь глубоко, есть программа под названием aid
, которая компилирует исходный код IDL и генерирует клиент (прокси) и сервер (заглушку) Интерфейсы Java.
Начальные строительные блоки.
Давайте начнем с основ. Чтобы создать AIDL, нам нужно открыть проект Android и нажать Файл -> Создать -> AUDI -> Файл AIDL
. Напишите свой файл первой ПОМОЩИ.
interface IMyAidlInterface { String getMessage(); }
Затем не забудьте Построить -> Перестроить
. Будет создан I Мой интерфейс Aidl
класс. Создайте класс, который расширяет интерфейс электронной почты. Заглушка
. Пожалуйста, не забудьте переопределить метод GetMessage()
в этом классе.
public class MyImplementor extends IMyAidlInterface.Stub { @Override public String getMessage() { return "Hello from AIDL Stub!"; } }
После того, как мы расширили класс заглушки и реализовали (переопределили) метод, мы должны создать Службу, которая будет предоставлять API-интерфейсы приложениям, которым необходимо привязать функции AIDL.
public class MyService extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return new MyImplementor(); } }
Кроме того, добавьте тег в
AndroidManifest.xml
внутри <приложение>
тега.
Теперь, когда мы внедрили сервисную часть, нам следует продолжить и создать еще один проект Android для клиентской части. Пожалуйста, обратите внимание, что вспомогательные средства очень чувствительны к регистру . К сожалению, Android Studio недостаточно развита для обнаружения синтаксических ошибок в файле AIDL. Любые изменения в файле AIDL потребуют перестройки проекта.
Настоящая река, которую нужно пересечь!
Мы закончили с серверной (сервисной) частью. Теперь мы должны создать другое приложение, которое будет нашей клиентской частью. Итак, создайте новый проект в Android Studio. После создания проекта мы должны сделать одну из самых важных вещей.
В Android Studio выберите представление проекта в левом верхнем меню. Внутри приложения/src/main/
создайте папку под названием помощь
.
После этого перейдите в приложение службы AIDL и скопируйте содержимое папки aidl
.
Вернитесь в клиентское приложение и вставьте содержимое в папку aidl
. Построить -> Перестроить
. Проект должен быть построен без каких-либо ошибок.
Перейти к MainActivity.java и создайте Соединение с сервисом
объект и Интерфейс электронной почты
private IMyAidlInterface iMyAidlInterface; private final ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected( ComponentName name, IBinder service) { iMyAidlInterface = IMyAidlInterface.Stub.asInterface(service); Log.d(TAG, "Service Connected."); Toast.makeText(MainActivity.this, "Service Connected.", Toast.LENGTH_SHORT).show(); } @Override public void onServiceDisconnected(ComponentName name) { iMyAidlInterface = null; Toast.makeText(MainActivity.this, "Service Disconnected.", Toast.LENGTH_SHORT).show(); } };
В onCreate()
из MainActivity.java
, свяжите службу. Обратите внимание, что нам нужно действие и имя пакета для успешной привязки к службе.
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent intent = new Intent(); intent.setPackage("com.zeliot.aidldemo"); intent.setAction("MyService"); bindService(intent, mServiceConnection, BIND_AUTO_CREATE); }
Теперь создайте кнопку и, нажимая на кнопку, вызовите i Мой интерфейс Aidl.GetMessage()
, чтобы получить строку из службы AIDL.
Мы закончили с клиентской и серверной частями. На данный момент Услуга подключена из другого приложения. Мы можем выполнять любые операции, используя то же самое. У нас может быть передача данных, асинхронные вызовы, обратные вызовы. Более подробная реализация будет опубликована во второй части этой серии.
Спасибо вам за чтение. Счастливого взаимодействия!! Теперь, чем
Оригинал: “https://dev.to/zeliotofficial/aidl-deep-dive-post-does-not-exist-part-i-4po8”