一文搞懂Android AIDL

介绍

AIDL(Android Interface Definition Language)用于在Android应用中实现进程间通信(IPC)。它允许不同应用或服务间的数据传递和方法调用,确保不同进程间能够相互访问和操作。通过AIDL,开发者可以定义一个接口,然后在服务端和客户端实现这个接口,实现跨进程的交互。背景上,AIDL主要解决了Android系统中的进程隔离问题,使得不同应用或进程能够安全有效地共享数据和功能。

示例

话不多说,直接开搂!

下面示例创建了两个安卓项目,一个服务端(com.xaye.aidl_1)一个客户端(com.xaye.aidl_2)

step1

如果你的项目中没有使用过AIDL,那么当你创建AIDL文件时,会遇到下图这种情况👇
在这里插入图片描述
解决方法是在你使用AIDL的模块build.gradle文件中添加以下代码

    buildFeatures {
        aidl true
    }

然后再rebuild一下就可以啦(●’◡’●)

step2

需要创建一个AIDL服务的接口,因为要供其他应用调用,创建AIDL文件时,需要右击main文件夹创建,因为AIDL需要和java文件夹在同级目录下,效果如下👇
在这里插入图片描述

此时的 libary 是作为主项目的子模块,当然 你也可以直接写在主模块中。

写之前先了解下在AIDL(Android Interface Definition Language)中,默认支持的几种数据类型:

  1. 基本数据类型
  • boolean:布尔值(true 或 false)
  • byte:8 位有符号整数
  • char:16 位 Unicode 字符
  • double:64 位双精度浮点数
  • float:32 位单精度浮点数
  • int:32 位有符号整数
  • long:64 位有符号整数
  • short:16 位有符号整数
  1. Java 对象
  • String:字符串
  • CharSequence:字符序列
  1. Bundle
  • Bundle 类可以用于在进程间传递一组键值对的集合,类似于一个映射表。
  1. List 和 Map
  • List<T>:支持基本数据类型和支持 Parcelable 接口的对象类型的列表。
  • Map<K, V>:支持基本数据类型和支持 Parcelable 接口的对象类型的映射表。
  1. Parcelable
  • 自定义的类如果实现了 Parcelable 接口,也可以在 AIDL 中使用。这是一个用来序列化对象的接口,可以将对象数据从一个进程传递到另一个进程。
  1. IBinder
  • IBinder 接口可以在 AIDL 中作为参数传递,允许在不同的进程间传递服务对象的引用。

step3

为了上点难度,咱们自定义两种类型 VideoParamsVideoCallback

创建服务接口(com.xaye.aidl_1):

可以参照上图

// IRemoteService.aidl
package com.xaye.library;

// 引用 VideoParams 和 VideoCallback
import com.xaye.library.VideoParams;
import com.xaye.library.VideoCallback;

interface IRemoteService {
   
   
   void processVideoClip(in VideoParams params, in VideoCallback callback);
}
VideoParams

VideoParams 是一个java bean,代码中需要对其序列化,在aidl中使用就是下面这样。

// VideoParams.aidl
package com.xaye.library;

import com.xaye.library.VideoParams;

parcelable VideoParams;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值