没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论





















Introduction
Android框架分析系列
以此来记载这几年的学习成果。
Introduction
2

第一章Androidbinder详解
AndroidBinder详解
TableofContents
1.binder简介
2.binder的实现
2.1.IBinder类简介
2.2.IInterface类简介
2.3.BpBinder和BBinder简介
2.4.ProcessState和IPCThreadState简介
2.5.ServiceManager简介
2.6.IMemory简介
本文将对Android的binder机制做一个较为深入的分析,除了讲解binder实现的细节,还会讲解
binder通信中的基础原理,以及创建binderservice的注意事项。本文的代码分析基于
Android4.2.2。
1.binder简介
在我刚刚学习binder的时候,对于binder非常的困惑,现在想起来困惑的原因还是因为对于IPC
的不了解。在学习binder之前,最好是对IPC有个基本的了解。IPC是Inter-process
communication的缩写,即进程间通信。IPC是一种允许进程间互相通信交换数据的机制。在
Linux平台上,进程之间是隔离的,各个进程运行在自己的虚拟地址空间中,如果不采取IPC
手段,进程之间是不能互相交换数据的。为了实现进程之间的数据交换,Linux提供了多种IPC
机制:
信号
管道
Socket
消息队列
信号量
共享内存
Android是基于Linux系统开发,除了上面的IPC机制以外,Android又提供了一种新的选
择:binder。本文不打算探究这几种机制之间的差异以及优劣,我的主要关注点在binder的实现
上。binder的实现采取了面向对象的编程思想,Android提供了大量的帮助类,通过使用这些帮
助类,binder程序开发人员基本不用关心数据是如何在进程之间传递的,而是集中精力设计好
顶层服务接口,按照规范实现好proxy和service类就可以很方便的扩展一个本地服务。站在
binder开发人员的角度来讲,一个binder的实现包括以下三个方面:
顶层服务接口类的定义,此类中声明了一系列的纯虚函数作为公共的服务接口。类的头
文件名一般为IXXXService.h,服务接口类命令为IXXXService,XXX为服务模块名。比
如Android系统提供的多媒体服务的接口类为:IMediaPlayerService,其头文件名为
IMediaPlayerService.h。
第一章Androidbinder详解
3

proxy端的实现。
service端的实现。proxy是相对于service而言,proxy和service都间接继承于IXXXService
顶层服务接口类,他们都实现了IXXXService中声明的虚函数接口,所以从外观上看,
是没什么区别的。对于用户来说,只需要持有一个IXXXService的指针,就可以调用其
服务函数,不用关心这个指针究竟是指向哪个子类的具体实现。proxy和service内部对于
同一个函数的实现是有差异的,在proxy端的实现中,是将函数的参数打包进容器,然后
透过Android提供的binder通信机制传递给service端,service端的实现是从这个容器中读
取出对应的参数,然后调用相应的实现函数。从这个角度来说,proxy只是一个空的壳
子,它并没有做实际的工作,而是把做实际工作需要的条件打包好,传递给service,由
service来完成具体工作。
下面的图简单的描述了顶层服务接口和proxy代理类,与service服务类之间的关系。
IXXXService是一个顶层服务接口类,它声明了一个doAction的方法,其子类proxy和service分
别实现了这个方法。但是proxy是将doAction方法参数打包,发送给service,由service负责执
行。
binder驱动是通信的媒介,为通信的进程在驱动层分配buffer,将用户层的参数buffer复制到驱
动层buffer,完成数据的交换。下图描述了这个过程:
站在系统角度来说,binder的实现包括:
一个client进程
一个service进程
binder驱动
其中,提供服务接口的进程为service进程,使用服务的为client进程。binder在这两者之间充当
第一章Androidbinder详解
4

通信的媒介,所有的通信数据都是经过bidner传递到对方的用户空间。下面是一个简单的图
例,描述了一次同步binder调用的过程:
proxy调用service的服务,称之为一次binder调用。binder调用有两种形式:
同步调用
异步调用
所谓同步调用就是proxy发送完数据给媒介binderdriver之后,开始等待的状态。直到service端
处理完本次调用,通过binderdriver返回了处理结果。异步调用就简单了,proxy直接发送完数
据给媒介binderdriver之后就返回了,不用等到service的处理结果。
综上,binder是Android提供的一种IPC通信机制,方便进程之间交换数据。binder的实现包括
一个公共的顶层服务接口,同时实现了这个公共顶层接口的proxy代理端和service端。binder
driver充当通信媒介。
2.binder的实现
上一个小节中,提纲挈领的介绍了bidner的基础信息,本章主要从代码的角度来分析binder的
实现。Android给用户提供了一个共享库:libbinder.so,这个库提供了一系列的接口类和帮助
函数,借助这些工具类,我们可以很方便的实现自己的binderservice。代码的路径:
frameworks/native/libs/binder
首先我们来看一张”全家福“:
第一章Androidbinder详解
5
剩余49页未读,继续阅读
资源评论


_ArcticOcean
- 粉丝: 68
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 网络信息安全B作业题和考试复习题.doc
- 互联网背景下如何提高图书编校质量.docx
- tcpip协议与网络管理标准教程.doc
- 大数据背景下高校思想政治教育过程融入路径探究.docx
- 云南基层干部教育培训信息化建设应用研究教育文档.doc
- 团购网站Groupon及中国电子商务发展分析.doc
- 外贸建站-营销型网站建设.doc
- 斩波电路Matlab仿真电力电子技术课程设计.doc
- 互联网+大连海参养殖新模式探究.docx
- python-游戏数据搜索引擎-基于Python开发的游戏信息检索系统-整合多平台游戏数据-提供快速搜索与详细展示功能-支持用户自定义筛选与收藏-适用于游戏爱好者与开发者查询游戏资.zip
- 人工智能双面观.docx
- 基于欧氏距离的K均方聚类算法研究与应用.docx
- 对安徽江苏山东网络电视台的比较分析.docx
- JavaEEJsp图书系统实用技术文档.doc
- 网络信息安全项目教程习题-解答.doc
- 物联网技术在现代种植业中的应用.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
