aidl的使用心得(一)
本文于 896 天之前发表,文中内容可能已经过时。
什么是AIDL?
- AIDL是指IPC(Internal progress Communicate)直译为进程间通信,在Android端就是指通俗的指两个APP之间通信。本人认为就是本地引用远程服务,即在客户端(本地)引用服务端(远程)的服务。
AIDL应用场景
- 就如他的定义一样,一般用于两个APP之间通信,虽然可以用进程间通信可以用全局广播,但由于广播安全性低,且所有APP都能收到。尤其是有序广播,其可以被拦截特性,顾采用AIDL方式进行通信。
- 一般来说就是支付宝支付,这种就需要使用AIDL方式,确保支持返回成功。
贴图支付宝
AIDL使用
为了方便管理分为3个模块
包含内容
一、服务端**(APP)**
- 定义Service服务,并写好服务中与变量的交互
二、客户端**(APP)**
- 引用包含Aidl Module的aar文件
- 绑定对应服务
三、AIDL Module**(Lib)**
- aidl文件夹:包括对应的aidl接口和传输的对象
- 常量文件,一般包含服务端的服务的action和packageName,确保能够正常引用
- 用于生成aar文件,方便引用
步骤
AIDL Module
创建Aidl的Module包
创建Aidl文件
其中包含定义接口和传递的对象
注意:
- 传递的对象不仅在aidl目录下有,也需要在对应java目录下存在,并且必须实现Parcelable接口
- aidl文件中需要自己全部手写,没有自动提示
- 传递对象的aidl文件需要import对应类所在的位置,以确保能够被找到
- buid Module,确保自动生成java对应的接口文件
- 确定服务端APP的报名和服务的action名,写入常量中
1 | /** |
服务端**(APP)**###
- 引用Aidl Moudle
implementation project(path: ‘:aidllib’) - 定义Service,注意在manifest中设置action名称,定义一个内部类Binder继承Stub,并实现对应aidl中定义的相关方法
1 |
|
1 |
|
客户端**(APP)**###
- 引用Aidl Moudle
- 绑定服务
- 使用Stub.asInterface(service),将其转化为对应接口
- 调用接口中的方法
注意:
- 此处获取的对象,不是服务端中的对象,所以在此处更改对象里面的值服务端不会更新,客户端只能将需要修改的值传入然后在服务端的binder中再进行修改
演示demo