外观
IPC、Binder、AIDL 是什么关系?
标准回答
IPC 是进程间通信的总称;Binder 是 Android 常用的 IPC 机制;AIDL 用来描述接口,并生成 Binder 代理和服务端分发代码。Parcel 负责传输数据的编解码。
关键机制
- 典型路径:客户端 Proxy → Binder 驱动 → 服务端 Stub → 业务实现,再把结果返回调用方。
- 远程同步调用会阻塞调用线程;服务端远程 AIDL 调用通常由 Binder 线程池处理,要考虑并发和线程安全。
- 同进程调用可能直接在调用者线程执行。传复杂对象要符合接口约定;Parcelable 对象不是把原内存对象跨进程共享。
通俗例子
主线程调用远程 getDeviceStatus,服务端又等硬件 300ms,页面也会被拖住。应避免在主线程进行不可控的同步调用,并设计异步状态回调。
易混淆点
oneway 使远程调用无需等业务返回,但不会消除服务端耗时和队列堆积;本地调用也不因此自动异步。
参考资料
内容来源
- Android 技术札记 · 原条目
binder