news 2026/4/28 21:02:27

binder

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
binder

Binder 是 Android 系统的核心跨进程通信机制,它像一条高性能的"管道",连接着不同的进程,让它们能够安全、高效地互相调用方法。它不仅仅是"一种方式",更是整个 Android 架构的基石——从应用启动、系统服务调用,到硬件访问,背后都有 Binder 的身影。

下面,我将从通信模型、驱动核心、线程管理三个层面,为你详细拆解 Binder 的工作机制。


1. Binder 的通信模型:Client-Server 的三方角色

Binder 采用经典的 Client-Server 通信模型,并由ServiceManager担任"电话总机"的角色,所有参与者通过 Binder 驱动在内核空间进行交互。整个过程分为清晰的三个步骤:

步骤一:服务端注册

Server 进程创建一个 Binder 对象,并通过 Binder 驱动向ServiceManager注册。这就好比,Server 将自己的"名字"和"分机号"告诉总机,以便Client 能找到它。

步骤二:客户端获取

Client 进程需要与 Server 通信时,会先向 ServiceManager 发送请求,并传入目标服务的"名字"。ServiceManager 找到对应的服务后,会通过 Binder 驱动将一个Binder 代理对象返回给 Client。这个代理对象是 Server 端 Binder 对象的"替身",位于 Client 进程内。

步骤三:双方通信

Client 获得代理对象后,就可以直接调用它的方法。实际上,Client 是在向这个"替身"发请求,而 Binder 驱动会负责将这个请求连同数据,一起转发给真正的 Server 进程处理。

Binder驱动客户端进程ServiceManager服务端进程Binder驱动客户端进程ServiceManager服务端进程步骤一:注册服务步骤二:获取服务步骤三:使用服务注册服务 (addService)转发注册请求记录服务注册成功获取服务 (getService)查询服务返回服务信息返回Binder代理对象通过代理调用方法转发调用请求返回执行结果返回结果

2. Binder 驱动的核心:一次拷贝

Binder 之所以高效,其最大的秘密在于“一次拷贝”的数据传输方式。

传统的 Linux IPC 方式,数据需要先从发送方拷贝到内核空间,再从内核空间拷贝到接收方,共两次拷贝。而 Binder 利用内存映射机制,在内核空间和接收方进程的用户空间,建立了同一块物理内存的映射

这意味着:

  1. 发送方将数据写入内核空间。
  2. 内核空间的这块内存,同时映射到了接收方的用户空间。

接收方无需再进行一次拷贝,可以直接读取。相较于传统的两次拷贝,Binder 的效率有显著提升。从 Android 8.0 开始,Google 还引入了分散-集中优化,进一步减少了数据序列化的开销,让通信更加流畅。

3. Binder 的线程管理:线程池与并发

Binder 驱动内部管理着一个线程池,负责高效处理并发请求。

  • 工作原理:当 Client 发起调用时,驱动会从目标 Server 进程的 Binder 线程池中,唤醒或分配一个空闲线程来处理这个请求。
  • 线程上限:每个进程的 Binder 线程池默认最多16个线程。如果并发请求超过这个数量,超出的请求就会排队等待。这就是为什么你在使用ContentProvider时,其 CRUD 操作最多只能有 16 个线程同时工作的原因。

4. 深入源码:核心类的"角色扮演"

Binder 通信的整个流程,在 Native 层由几个关键的 C++ 类协作完成。为了让你更容易理解,我打了个比方:

角色扮演描述
IInterface"业务接口"合同定义了具体要做什么业务(比如add(int a, int b))。这是跨进程调用的协议。
IBinder"跨网传输"能力代表了一种可以穿越进程边界的能力,是 Binder 通信的基石。
BBinder真正的"服务专员"位于Server 进程,是IBinder的实现。它拥有真正的业务逻辑,等待着驱动转交过来的请求。
BpBinder服务的"远程代理"位于Client 进程,也是IBinder的实现。它长得像 Server 端专员,但内部只负责打包请求、发送给驱动,并等待结果。
ProcessState“进程办事处”每个进程只有一个,负责打开 Binder 驱动,并管理本进程的 Binder 通信资源。
IPCThreadState“一线办事员”负责真正的数据读写(通过ioctl系统调用与驱动交互)。每个线程都有自己独立的一个。

总结

总的来说,Binder 通过Client-Server 模型搭配ServiceManager 总机的方式,简化了服务发现流程;其核心驱动层利用内存映射技术,实现了一次拷贝的超高效率;同时,内核级的线程池管理优先级继承机制,确保了系统的稳定和流畅。

这种"用户友好 + 内核高效"的设计,正是 Binder 成为 Android 核心 IPC 机制的原因。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 21:02:27

哪些 AI 论文写作工具真正好用且口碑好,性价比高?求真实推荐

毕业季论文压力山大,查重、AIGC 检测、文献梳理、格式排版层层关卡,选对 AI 工具能少走 90% 弯路!市面工具鱼龙混杂,低价陷阱、假文献、AI 味过重等问题层出不穷。今天结合上千名学生实测反馈,聚焦PaperRed、笔捷 AI、…

作者头像 李华
网站建设 2026/4/28 20:57:23

量子计算基准测试:CLV与FFV技术解析与应用

1. 量子计算基准测试的现状与挑战量子计算技术正从NISQ(含噪声中等规模量子)时代向容错量子计算过渡,这一阶段亟需建立能够客观评估硬件性能的基准测试体系。传统基准测试方法面临三大核心矛盾:可验证性与计算复杂度:完…

作者头像 李华
网站建设 2026/4/28 20:55:21

蓝桥杯嵌入式备赛:用STM32定时器捕获模式搞定频率测量(附完整代码)

蓝桥杯嵌入式竞赛实战:STM32定时器捕获模式精准测频全攻略 在蓝桥杯嵌入式竞赛的战场上,频率测量是选手们经常需要攻克的关键技术点之一。无论是信号发生器输出、传感器脉冲还是通信模块载波,准确快速地获取频率参数往往是功能实现的第一步。…

作者头像 李华
网站建设 2026/4/28 20:54:27

识局者生:在亚马逊,为何“不做什么”比“能做什么”更重要一万倍

在亚马逊的残酷竞争中,你最不需要的,就是“营销天才”的自我幻觉。事实上,这种对自身技巧的过度自信,往往是最致命的战略缺陷。许多在单一品类取得成功的亚马逊卖家,常将其成功归功于某种“独家打法”或“运营技巧”&a…

作者头像 李华