Binder



  Binder是一种架构,这种架构提供了服务端接口、Binder驱动、客户端接口三个模块。

首先来看服务端,一个Binder服务端就是一个Binder类的对象,该对象一旦被创建,内部就启动一个隐藏线程。该线程接下来会接收Binder驱动发送的消息,收到消息后,会执行到Binder对象的onTransact()函数,并按照该函数的参数执行不同的服务代码。因此要实现一个Binder服务端,就必须重载onTransact()函数。

  其实重载onTransact()函数的目的就是将onTransact()函数的参数转换为服务函数的参数。

onTransact()函数的参数来源是客户端调用transact()函数时传入的,因此,transact()出入什么参数,onTransact()函数就会接收到什么参数。

  下面再看Binder驱动,任意一个服务端Binder对象被创建时,同时会在Binder驱动中创建一个对应的Binder对象,作为Binder驱动的成员mRemote。客户端要访问远程服务时,都是通过mRemote来实现。

  最后来看客户端,客户端想要访问远程服务,必须要获取远程服务在Binder驱动中对应的mRemote字段,获得mRemote字段后就可以调用其transact()函数,mRemote也重载了transact()函数,重载内容包括以下几项:

以线程通信的模式,向服务端发送客户端传递过来的参数。

挂起当前线程,当前线程正式客户端线程,并等待服务端线程执行完毕指定的服务函 数后的通知。

接收到服务端线程的通知,然后几项执行客户端线程,并返回到客户端代码区。

从这里可以看出,客户端似乎是直接调用远程服务对应的Binder,而事实上测试通过Binder驱动中的Binder对象进行了中专。即存在两个Binder对象,一个是服务端的Binder对象,另一个是Binder驱动中的Binder驱动,所不同的是Binder驱动中对象不会再额外开一个线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值