外观
IPC Binder AIDL Parcel 分别是什么?
标准回答
IPC 是进程间通信的总称;Binder 是 Android 常用的 IPC 机制;AIDL 用接口定义生成调用两端的适配代码;Parcel 是 Binder 等场景中组织传输数据的容器。不同进程的通信都属于 IPC,但不一定使用 Binder。
机制解释
远程同步 Binder 调用会等待服务端处理,主线程发起就可能阻塞 UI。远程服务端调用通常由 Binder 线程池处理;同进程本地接口调用可能直接在调用线程执行。AIDL 并不让线程安全问题自动消失。
延伸追问
自定义对象可以传吗?可以按接口支持的形式进行 Parcelable 等序列化设计,但不是任意 Java 对象都能原样发送。大数据不适合全部塞进事务,应考虑文件描述符、共享内存或分块协议。
内容来源
- Android 智能硬件 SDK 技术 Wiki · 原条目
Q23