注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

东东的博客

江南烟雨,同大家一起分享

 
 
 

日志

 
 

android binder 讲解(二)  

2011-04-28 11:28:43|  分类: android相关 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
第二部分 Binder的运作 
  2.1 Binder的工作机制 
      Service Manager是一个守护进程,它负责启动各个进程之间的服务,对于相关的两个需要通讯的进程,它们通过调用libutil.so库实现通讯,而真正通讯的机制,是内核空间中的一块共享内存。 

 2.2 从应用程序的角度看Binder 
  从应用程序的角度看Binder一共有三个方面: 
  Native 本地:例如BnABC,这是一个需要被继承和实现的类。 
  Proxy 代理:例如BpABC,这是一个在接口框架中被实现,但是在接口中没有体现的类。 
  客户端:例如客户端得到一个接口ABC,在调用的时候实际上被调用的是BpABC 

本地功能(Bn)部分做的: 
    实现BnABC:: BnTransact() 
    注册服务:IServiceManager::AddService 
代理部分(Bp)做的: 
    实现几个功能函数,调用BpABC::remote()->transact() 
客户端做的: 
    获得ABC接口,然后调用接口(实际上调用了BpABC,继而通过IPC调用了BnABC,然后调用了具体的功能) 
       在程序的实现过程中BnABC和BpABC是双继承了接口ABC。一般来说BpABC是一个实现类,这个实现类不需要在接口中体现,它实际上负责的只是通讯功能,不执行具体的功能;BnABC则是一个接口类,需要一个真正工作的类来继承、实现它,这个类才是真正执行具体功能的类。 
       在客户端中,从ISeriviceManager中获得一个ABC的接口,客户端调用这个接口,实际上是在调用BpABC,而BpABC又通过Binder的IPC机制和BnABC通讯,BnABC的实现类在后面执行。 
  事实上, 
服务器 
的具体实现和客户端是两个不同的进程,如果不考虑进程间通讯的过程,从调用者的角度,似乎客户端在直接调用另外一个进程间的函数——当然这个函数必须是接口ABC中定义的。 
  2.3 ISericeManager的作用 
    ISericeManager涉及的两个文件是ISericeManager.h和ISericeManager.cpp。这两个文件基本上是 
ISericeManager。ISericeManager是系统最先被启动的服务。非常值得注意的是:ISericeManager本地功能并没有使 
现,它实际上由ServiceManager守护进程执行,而用户程序通过调用BpServiceManager来获得其他的服务。 
      在ISericeManager.h中定义了一个接口,用于得到默认的ISericeManager: 
        sp defaultServiceManager(); 
     这时得到的ISericeManager实际上是一个全局的ISericeManager。 

  评论这张
 
阅读(1097)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017