AIDL与HIDL核心概念透彻理解

目录

一. 概述

二. 核心流程的核心理解

三. 一些术语

四. 参考样例


一. 概述

AIDL和HIDL都是主要用于跨进程通信,本质是Binder通信。

总体流程都是先写.aidl文件或.hal文件,这个文件只有接口定义哦不是实现,然后利用工具自动生成代码,再利用生成的代码写具体接口的实现及调用。

二. 核心流程的核心理解

网上很多说不清楚,不要扯虚头巴脑的一堆,我说下核心流程:

  1. 先.aidl生成代码,比如 IMyAidlInterface.aidl 生成代码,server侧和client侧都要有哦,包名要一样。
  2. Server侧:继承生成代码中的 IMyAidlInterface.Stub 类来实现接口,比如 class MyBinder extends IMyAidlInterface.Stub,因为 service 通信时候你要调用接口所以在 onBind() 中返回该类。
  3. 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 流程可参考优秀博客:

AIDL - 简书 (jianshu.com)

你可能感兴趣的:(Android知识体系,android)