您的位置:首页 > 移动开发 > Android开发

Binder

2015-10-18 15:15 267 查看


  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驱动中对象不会再额外开一个线程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android Binder