全文参考网址:http://light3moon.com/1986/12/20/%E6%96%87%E7%AB%A0%E7%B4%A2%E5%BC%95/
1、 Binder通信模型
通信流程图:
各个步骤流程:
1) service 运行,阻塞于 ioctl,等待 client 发起请求
service 进程运行起来,然后通过调用 IPCThreadState 的 joinThreadLoop 在本线程中开始等待客户端请求的到来。两个前提条件:第一个,system service 必须向 service manager 注册自己;第二个,服务端的多线程支持问题。
2) client 通过 ioctl 发起 IPC 请求,等待 service 结果
- client send BC_TRANSACTION —> kernel
客户端从SM那边获取所需要的服务,再发起IPC调用Bp的transaction 函数。然后将调用writeTransactionData向service写入请求数据。
- kernel returnBR_TRANSACTION_COMPLETE —> client
- client 阻塞于 ioctl,等待 service 返回结果
调用waitForResponse()函数等待返回结果.
3) service 被唤醒,完成业务,返回结果
service被唤醒后,调用tal