外观
Binder 机制是如何实现跨进程数据传输的?其内核层的核心组件有哪些?
标准回答
跨进程时,客户端 Proxy 把参数写入 Parcel 并发起事务,Binder 驱动将事务交给服务端 Binder 线程,Stub 解包后调用实现,同步调用再把结果返回。内核常见结构包括 binder_proc、binder_thread、binder_node、binder_ref 和 binder_transaction。
**职责边界:**驱动管理进程/线程、对象引用、事务和传输缓冲;ServiceManager 提供服务注册发现,但它是用户空间组件,不是 Binder 驱动中的一个内核类。
通俗例子
应用询问系统服务时,看似调用一个 Java 方法,实际可能经历打包、跨进程排队、服务端处理以及结果返回。
深入解释
**为什么需要 Binder:**不同进程不能像同一进程那样直接访问彼此的普通对象。Binder 提供传递请求、身份和返回结果的机制,让客户端按接口调用另一个进程的服务。
**一次同步调用经过什么:**代理把参数写入 Parcel,经 Binder 驱动交给服务端,由服务端 Stub 分发到具体实现;处理结果再返回。客户端在同步结果返回前通常需要等待。
易混淆点
同进程本地接口调用可能直接执行对象方法,并不必然经过驱动或 Binder 线程池。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
7.1.1