BInder浅析_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > BInder浅析

BInder浅析

 2014/4/5 18:14:24  ArayzBuffer  博客园  我要评论(0)
  • 摘要:Binder是什么Binder是运行在Android内核态用于进程间通信(IPC)的驱动,采用C/S架构,由三项基本组件组成:Binder服务端,Binder驱动,应用程序客户端。为什么要用BinderAndroid需要为运行中的不同的进程提供全局的服务,使进程之间能相互通信。Binder的运作机制Binder的三个组件:Binder服务端,Binder驱动,应用程序客户端。Binder服务端代码级表现为一个继承Binder的类(重载onTransact())
  • 标签:

Binder是什么

    Binder是运行在Android内核态用于进程间通信(IPC)的驱动,采用C/S架构,由三项基本组件组成:Binder服务端Binder驱动,应用程序客户端。

 

为什么要用Binder

    Android需要为运行中的不同的进程提供全局的服务,使进程之间能相互通信。

 

Binder运作机制

    Binder的三个组件:Binder服务端,Binder驱动,应用程序客户端。Binder服务端代码级表现为一个继承Binder的类(重载onTransact()),Binder驱动的代码级表现为一个mRemote对象(同样继承Binder类,重载transact()),mRemoteBinder服务端与应用程序客户端之间中转。

Binder的远方服务端为所有应用进程提供全局服务,它维护一个隐藏的线程(初始化对象时即创建),该线程接收Binder驱动发送过来的消息,将参数传给onTransact(),由onTransact()处理请求,并且返回数据,实现Binder时,需要将onTransact()重载以提供处理代码。

onTransact(int code,Parcel data,Parcel reply,int flags)throw RemoteException{

    //此处添加处理代码

return super.onTransacet(int code,Parcel data,Pacel reply,int flags);

}

问题1;Binder服务端如何知道客户端需要调用哪个服务,又到哪里找客户端传来的参数?

回答:code参数标示了客户端期望服务端调用的功能,data参数保存了客户端传过来的数据,客户端需要按顺序将参数存入data中,服务端也需要按顺序从data中读取数据。

问题2:Binder服务端如何返回数据?

回答:通过调用reply变量中相关函数往其写入数据即可,如果返回数据,flags参数必须为0,否则必须为1

Binder驱动中的mRemote需要重载transact(),并且实现三件事:向服务端发送调用信息->挂起当前线程,等待服务端返回后恢复->返回服务端的结果。

客户端与服务端通信需要获得Binder驱动中的mRemote对象的引用,并且调用mRemote.transact(int code,Parcel data,Parcel reply,int flags)。原型如下:

public final boolean transact(int code,Parcel data,Parcel reply,int flags);

方法中各参数的意义与服务端的onTransact()方法中各参数一样。

Android SDK提供aidl工具生成代码重载transact()和onTransact()并统一传入data和读取data中参数的顺序。

    

 

 

 

------参考至《Android内核剖析》

上一篇: 库克去年收入7400万美元:仅次于扎克伯格 下一篇: 没有下一篇了!
  • 相关文章
发表评论
用户名: 匿名