Android 基础技术——Binder 机制

笔者希望做一个系列,整理 Android 基础技术,本章是关于Binder 机制

什么是Binder

机制:Binder 是一种进程间通信机制

驱动:Binder 是一个虚拟物理设备驱动

应用层:Binder 是一个能发起通信的 Java 类

为什么要使用Binder

图解析:

性能上:binder小于共享内存 优于其他ipc

共享内存的缺点: 有 死锁和数据不同步(线程需要做同步处理)的风险

身份识别:依赖上层协议,知道PID(身份ID)可以调用服务, 可以伪造PID(由调用方来告知,可以伪造)。

binder uid 是唯一的,系统分配UID, 比较安全 。 linux里的id: 组id, 用户id。

实名和匿名:系统服务是实名的,个人的注册服务 (自己创建的Service,其他app也是拿不到)一般是匿名 ; 去servicemanager注册的是实名的。

Binder如何实现一次拷贝

回答:通过MMAP

Binder里 MMAP 的原理是啥

回答mmap原理: 让一块虚拟的内存指向一块已知的物理内存如文件, 返回一个文件句柄。然后我们直接操作这个文件句柄 就可以实现数据的一次拷贝。

mmap能够让虚拟内存和指定的物理内存直接联系起来。(记住这句话)

Binder 传输数据有没限制

如果传递的就是1M-8k 是否可以? 不行,因为还会包装,像网络协议一样

同步是1M-8k

异步是512K-4k

aidl是如何生成java类的细节
  1. aidl帮你生成java文件,你只需要写服务接口aidl 文件即可
  2. xxx.aidl 会生成 xxx.java 类 继承 android.os.IInterface, 有静态内部类 Stub 以及 Proxy 。
  3. Stub 继承 android.os.Binder 类 并且实现 xxx.java 接口;Proxy 实现 xxx.java 接口 。
  4. Stub 有一个 asInterface 接口,作用是区分是否同一个进程,如果是本地进程,返回的是接口xxx,如果是跨进程,返回的是 Proxy
  5. Stub 的 asBinder 接口返回的是this 本身 。Stub 是服务端对象
  6. Proxy 类内部持有一个成员变量mRemote:andorid.os.IBinder 对象 ,有一个方法叫asBinder,返回的是 mRemote 。
  7. Proxy 类会实现 xxx.java 里面的接口。实现接口的时候实际上是调用mRemote.transact(Parcel data, Parcel replay),调用transact 方法时候,客户端线程会被挂起 。Proxy 是客户端对象
  8. mRemote.trancact 调用后,会进入到 Stub的onTransact 接口 ,根据不同的接口调用真正的服务接口,如果有数据返回则通过 reply 写入内容 。
  9. 服务连接后,客户端拿到的就是 Proxy 对象
相关推荐
消失的旧时光-194316 天前
Android 系统层扫盲 11:JNI 到底是什么?Java / Kotlin 是怎么调用 C/C++ 的?
android·binder·zygote·system_server·aops
wardenlzr1 个月前
车机Binder 线程池耗尽实战排查与内核内存原理深挖
binder·性能·车机
Android-Flutter1 个月前
android Binder 应用层开发 详解
android·binder
爱跑马的程序员2 个月前
安卓专有的通信子系统-Binder IPC
android·binder·ipc·安卓间通信机制
tzc_fly2 个月前
KDD 2026 | PRIME:一种用于从头设计binder的 3D 分子模型
3d·binder
且随疾风前行.3 个月前
Android Binder 驱动 - 内核驱动层源码初探
android·网络·binder
故渊at4 个月前
第十一板块:Android 跨进程通信与 Binder 深度剖析 | 第二十七篇:Binder 线程池与死亡通知(Death Recipient)机制
android·binder·线程池·死亡通知·跨进程通讯
故渊at4 个月前
第二板块:Android 四大组件标准化学理 | 第十一篇:组件间通信(IPC)与 Binder 深度解析
android·binder·组件化·组件间通信
刮风那天5 个月前
Android AMS创建进程不用Binder而用Socket?
android·java·binder
哈哈,柳暗花明5 个月前
Framework开发专题系列四:Binder基础
framework·binder·aidl·messenger·hidl·native binder·asyncchannel