AIDL与HIDL核心概念

简介: 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)

---------------------

作者:alibli

来源:CSDN

原文:https://blog.csdn.net/weixin_36389889/article/details/125949031#%E6%A6%82%E8%BF%B0

版权声明:本文为作者原创文章,转载请附上博文链接!

内容解析By:CSDN,CNBLOG博客文章一键转载插件


目录
相关文章
|
5月前
|
JSON IDE Java
Java反射详解:核心概念、使用方法与实际应用
Java反射详解:核心概念、使用方法与实际应用
80 2
|
6月前
AIDL原理
AIDL原理
31 0
|
6月前
|
消息中间件 Linux API
跨进程通信设计:Qt 进程间通讯类全面解析
跨进程通信设计:Qt 进程间通讯类全面解析
431 0
|
传感器 Java Android开发
简单明了,彻底地理解Binder
简单明了,彻底地理解Binder
简单明了,彻底地理解Binder
|
设计模式 Java Android开发
跨进程单例 | Andorid进程通信AIDL原理及应用
设计模式中的单例模式在多进程场景下会演变成多例,存在线程安全问题。本文通过跨进程通信机制让多进程共享单例。
421 0
|
Java
java接口简介
1.1接口简介 接口,在java中是一种引用数据类型,里面主要有常量、抽象方法(jdk及以前)、默认方法和静态方法(jdk8)、和私有方法(jdk9)。接口是一系列方法的声明,是一些方法的特征集合,一个接口只要方法的特征而没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现类的方法具有不同的功能。
127 0
【Binder 机制】AIDL 分析 ( AIDL 通信完整流程梳理 )
【Binder 机制】AIDL 分析 ( AIDL 通信完整流程梳理 )
277 0
|
自然语言处理 数据格式
从零开始实现一个IDL+RPC框架
一、RPC是什么 在很久之前的单机时代,一台电脑中跑着多个进程,进程之间没有交流各干各的,就这样过了很多年。突然有一天有了新需求,A进程需要实现一个画图的功能,恰好邻居B进程已经有了这个功能,偷懒的程序员C想出了一个办法:A进程调B进程的画图功能。
|
Java 网络协议 安全
彻底弄懂binder与aidl
aidl与binder机制 为什么需要binder 没有用到binder之前,我们每个app生活在分配给自己的虚拟机和内存空间中,这样保证了app应用的安全,到很多时候我们需要用到跨进程通信(IPC),这时binder就为此而生。
2285 0