- Binder : 在android中适用于进程间通信(IPC)的;
在Linux层面说 它属于一个驱动,只是不需要硬件 操作的是一小段内存;
在线程角度说 Binder驱动代码运行在内核态,客户端调用Binder是通过系统调用完成的。
- Binder框架:
- binder服务端:
- 实际上就是一个binder,一旦创建就会启动一个隐藏线程,会接收binder驱动发送的消息收到消息后 执行到binder对象的OnTransaction()方法
- 并按照该函数的参数执行不同的服务代码,故重载onTransact()是必须的
- onTransaction(): 主要内容是onTransact()函数的参数转换为服务函数的参数,参数来源是客户端调用transaction()函数使输入的,因此,
- 如果transact()有固定格式的输入 那么onTransact()就会有固定格式的输出
- binder驱动:
- 服务端Binder对象被创建的同时 会在Binder驱动中创建一个 mRemote(IBinder类型)的对象,客户通过它来访问远程服务
- 重载 transact()方法具体实现:
- 向服务端线程发送调用消息
- 挂起当前线程,等待服务器端执行完毕后的通知
- 接到通知,继续客户端线程,并返回执行结果
- 应用程序客户端