一. 概述
AIDL和HIDL都是主要用于跨进程通信,本质是Binder通信。
总体流程都是先写.aidl文件或.hal文件,这个文件只有接口定义哦不是实现,然后利用工具自动生成代码,再利用生成的代码写具体接口的实现及调用。
二. 核心流程的核心理解
网上很多说不清楚,不要扯虚头巴脑的一堆,我说下核心流程:
- 先.aidl生成代码,比如 IMyAidlInterface.aidl 生成代码,server侧和client侧都要有哦,包名要一样。
- Server侧:继承生成代码中的 IMyAidlInterface.Stub 类来实现接口,比如 class MyBinder extends IMyAidlInterface.Stub,因为 service 通信时候你要调用接口所以在 onBind() 中返回该类。
- Client侧:onServiceConnected() 里获取刚才准备好的 MyBinder 类,iMyAidlInterface = IMyAidlInterface.Stub.asInterface(service),调用接口的方式就直接 iMyAidlInterface.[接口] 就可以了。
对照我说的流程看一遍实际例子,你会透彻理解!最后部分我提供了优秀博客例子。
.hal 流程一样的,只不过不叫 Proxy 和 Stub ,而是叫 Bp 和 Bn。
三. 一些术语
对于AIDL生成java代码,客户端(client)对应 Proxy,服务端(server)对应 Stub。注意,也可生成c++代码,如今 framework 与 native 通信经常使用。
对于HIDL生成c++代码,客户端(client)对应 Bp(Binder Proxy),服务端(server)对应 Bn(Binder Native)。
本质一样。
可以这样理解,你要去银行存钱,你找个代理人去存,存在ATM里。你是client,银行是server,代理人是proxy,ATM是stub。钱需要是序列化数据Parcel。
通信是 kernel 帮你做的,感兴趣可以深入。
四. 参考样例
编写 AIDL 流程可参考优秀博客:
---------------------
作者:alibli
来源:CSDN
原文:https://blog.csdn.net/weixin_36389889/article/details/125949031#%E6%A6%82%E8%BF%B0
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件