【Android】AIDL原理以及基本类型数据传递

本文介绍了Android中的AIDL(Android Interface Definition Language)原理及其用于跨进程传递基本类型数据的方法。AIDL简化了进程间通信(IPC)的复杂性,通过定义接口文件,自动生成服务端和客户端的Java代码。服务端实现接口并返回Stub,客户端通过绑定服务获取Stub以调用远程方法。示例展示了如何定义AIDL接口,实现服务端Service,配置AndroidManifest.xml,以及在客户端进行服务绑定和数据传递。测试结果显示客户端能成功接收并显示服务端返回的字符串数据。
摘要由CSDN通过智能技术生成

AIDL原理

AIDL是 Android Interface definition language的缩写,它是一种进程通信接口的描述,通过sdk解释器对器进行编译,会把它编译成java代码在gen目录下,类路径与aidl文件的类路径相同。

AIDL的目的就是让 IPC的通讯就像调用函数那样简单。自动的帮你完成了参数序列化发送以及解析返回数据的那一系列麻烦。而你所需要做的就是写上一个接口文件,然后利用aidl工具转化一下得到另一个java文件,这个文件在服务和客户端程序各放一份。服务程序继承IxxxxService.Stub 然后将函数接口里面的逻辑代码实现一下,而客户端通过服务绑定获取服务端返回的Stub,就可以通过这个Stub像是调用本地方法一样调用远程方法并进行进程间的通信了。基本原理大概就是这样,如果深入理解的话可以看看Java中的远程过程调用RMI和Unix网络编程的第二卷专门讲IPC。

客户端和服务端进行通讯,你得先将你的通讯请求转换成序列化的数据,然后调用函数发送给服务端,而且还得制定一个协议,参数谁先谁后,服务端和客户端都必须一致,否则就会出错。这样的过程很麻烦,如果有上百个接口,那可就要疯掉了。而AIDL就很好的解决上述的一系列问题,规范化了远程调用和数据传输,只需要写一个aidl文件定义一个服务函数,这份AIDL文件同时放到client 和Service端,由IDE生成响应的java文件。生成的java文件的UML图如下,Client通过本地代理调用远程方法,远程服务为Client提供一个Stub存根供其使用。本质上Client和Service并不是直接联系的,stub存根抽像类需要在服务端实现,proxy代理类被客户端使用,通过stub,proxy的封装,屏蔽了进程通信的细节。

AIDL跨进程传递基本类型数据

对于基本数据类型如String ,int, float 等可以直接在进程间传递,所需要做的就是定义好接口文件。工程结构如下:
客户端:

服务端:

完整过程如下:

第一步:定义AIDL接口

AIDL接口文件在客户端和服务器端都要定义,并且要在同一包中,就是上图中的StringServiceAIDL.aidl文件。该文件定义完成之后,IDE会自动为我们生成同名java文件,此处为StringServiceAIDL.java。不用去管其中的细节&#

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值