- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Albertchen
Binder 通信简介:
Linux 系统中进程间通信的方式有 :socket, named pipe,message queque, signal,share
memory 。Java 系统中的进程间通信方式有 socket, named pipe 等, android 应用程序理所当然可以
应用 JAVA 的 IPC 机制实现进程间的通信,但我查看 android 的源码,在同一终端上的应用软件的通 信
几乎看不到这些 IPC 通信方式,取而代之的是 Binder 通信。 Google 为什么要采用这种方式呢,这取决
于 Binder 通信方式的高效率。 Binder 通信是通过 linux 的 binder driver 来实现的, Binder 通信操作
类似线程迁移 (thread migration) ,两个进程间 IPC 看起来就象是一个进程进入另一个进程执行代码然后
带着执行的结果返回。 Binder 的用户空间为每一个进程维护着 一个可用的线程池,线程池用于处理到来
的 IPC 以及执行进程本地消息, Binder 通信是同步而不是异步。
Android 中的 Binder 通信是基于 Service 与 Client 的,所有需要 IBinder 通信的进程都必须
创建一个 IBinder 接口,系统中 有一个进程管理所有的 system service,Android 不允许用户添加非授
权的 System service, 当然现在源码开发了,我们可以修改一些代码来实现添加底层 system Service 的
目的。对用户程序来说,我们也要创建 server, 或者 Service 用于进程间通信,这里有一个
ActivityManagerService 管理 JAVA 应用层所有的 service 创建与连接 (connect),disconnect, 所有的
Activity 也是通过这个 service 来启动,加载的。ActivityManagerService 也是加载在 Systems Servcie
中的。
Android 虚拟机启动之前系统会先启动 service Manager 进程,service Manager 打开 binder
驱动,并通知 binder kernel 驱动程序这个进程将作为 System Service Manager ,然后该进程将进入
一个循环,等待处理来自其他进程的数据。用户创建一个 System service 后,通过
defaultServiceManager 得到一个远程 ServiceManager 的接口,通过这个接口我们可以调用
addService 函数将 System service 添加到 Service Manager 进程中,然后 client 可以通过 getService
获取到需要连接的目的 Service 的 IBinder 对象,这个 IBinder 是 Service 的 BBinder 在 binder kernel
的一个参考,所以 service IBinder 在 binder kernel 中不会存在相同的两个 IBinder 对象,每一个 Client
进程同样需要打开 Binder 驱动程序。对用户程序而言,我们获得这个对象就可 以通过 binder kernel 访
问 service 对象中的方法。 Client 与 Service 在不同的进程中,通过这种方式实现了类似线程间的迁移的
通信方式,对用户程序 而言当调用 Service 返回的 IBinder 接口后,访问 Service 中的方法就如同调用
自己的函数。
下图为 client 与 Service 建立连接的示意图
首先从 ServiceMana
您可能关注的文档
最近下载
- 九成宫醴泉铭原版碑帖米字格(全).docx
- 2025-2026学年道德与法治 三年级上册 统编版 专项测试卷(二)公共生活靠大家 (有答案).docx VIP
- 生物基高分子材料PPT课件.ppt VIP
- 上海电力大学《高等数学下》2025 - 2026学年第一学期期末试卷(A卷).docx VIP
- 上海电力大学《高等数学Ⅱ》2025-----2026学年期末试卷(A卷).docx VIP
- 语文园地二第二课时课件(二)小学语文二年级上册.pptx VIP
- 二年级【语文】《语文园地二》第一课时2课件.pptx VIP
- 《SH0375-19922-号航空润滑脂》.pdf VIP
- 小学语文二年级上册课件 第二单元复习活动课课件.ppt VIP
- 2025年化肥行业产能布局优化与市场分析.docx
原创力文档


文档评论(0)