目的
解决进程间相互调用
常见IPC
- Signals 信号量
- Pipes 管道
- Socket 套接字(设置中底层会用到)
- Message Queue 消息队列
- Shared Memory 共享内存
使用Binder原因
- 内存限制
- Android 不支持System V IPC ??
- 安全问题
- 需要Death Notification,线程终止通知
模型
Binder通信模型 Client-Server
调用
- Client 客户端,自己实现,简单是AIDL自动生成的接口类
- Binder Driver 内核实现驱动
- Server Service中onBind返回的IBinder对象
Client可以手动调用Binder Driver的transact接口,也可以通过AIDL生成的Proxy调用,Binder Driver会调用Server(service的代理,service中onBind返回的Binder对象);Server启动一个线程池来处理Client调用请求,处理完成后将结果返回给Binder Driver,Binder Driver再返回给Client。