Android Binder机制

CS架构中,Client需要找到Server,所以Binder使用Client-Server通信方式:

  • 一个进程作为Server提供解码、地址查询、网络连接等服务
  • 多个进程作为Client向Server发送服务请求,获得所需的服务。

要想实现以上功能,Server通信必须实现以下两点:

  • Server必须有确定的访问接入点,并且Client可以通过某种方式获知Server的地址
  • 制定Command-Reply协议用于传输数据
    例如:在网络通信中Server的访问接入点就是Server的IP地址+端口号,传输协议为TCP协议。
    那么:对Binder而言,可以将Server堪称实现某个特定服务的访问接入点,Client通过这个“地址”向Server发送请求;对Client而言,Binder可以看成通向Server的管道入口,要想和谋和Server通信首先要建立这个管道并获得管道入口。

与其他的IPC(Interprocess communication,进程通信协议)不同,Binder使用了面向对象的实现来描述作为接入点的Binder和Client的入口。Binder是一个实例(位于Server中的对象),其提供了一套方法用以实现对服务的请求,类似于成员的函数。Client中的入口可以看作指向Binder对象的“指针”,获得该指针即可访问Server。
在Client看来,通过Binder“指针”调用其提供的方法和通过指针调用其他的本地对象的方法无区别。

因此,可以总结为:
Binder对象是一个可以跨进程应用的对象,实例存在于一个进程中,而引用遍布于系统的各个进程之中。
比较牛的是,这个引用可以像Java中一样,既可以是强类型也可以是弱类型,而且可以从一个进程传给其他进程,让所有线程都可以访问一个Server。模糊了进程边界,淡化了进程间通信过程,整个系统仿佛运行在一个面向对象的程序之中,Binder就像胶水一样。

Binder通信模型

Binder框架定义了四个角色:Server、Client、ServiceManger(SMgr)和Binder驱动。其中Server和Client运行于用户空间,驱动运行于内核空间。
类比关系:Server->服务器、Client->客户端、SMgr->DNS、驱动->路由器
## Binder驱动
虽然叫驱动,但是和硬件没有关系,只是实现方式一样:
工作于内核态、提供open()、mmap()、poll()、ioct()等标准文件操作。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值