外观
Binder 的完整调用过程是什么?
标准回答
客户端拿到目标服务的 Binder 引用,远程情况下使用 Proxy 把接口参数写入 Parcel,再通过 transact 进入 Binder 驱动。驱动依据目标 Binder 节点和句柄把事务送到服务进程,服务端 Binder 线程读取事务,由 Stub.onTransact 解码参数并调用具体实现。同步调用在服务端处理后返回 reply,客户端读取结果;oneway 调用不等待业务结果。Binder 同时支持对象引用传递和调用者身份信息,因此系统服务可以校验实际 calling UID。ServiceManager 主要参与服务发现,不会转发每一次业务调用。
延伸追问
Binder 既有 Java API,也有 Native 库和内核驱动,AIDL 生成代码只是接口封装的一部分。
内容来源
- Android Framework 知识手册 · 原条目
4-1