001——Binder 机制详解—Binder IPC 程序结构

http://www.cloudchou.com/android/post-497.html


前言

通过Binder入门系列,我们已知道如何创建native binder service,framework binder service,应用层binder service,并知道如何编写framework层和应用层的客户端去调用native binder service。接下来几篇博客将为大家详细分析Binder机制,目前打算写如下几篇博客:

  • 1) Binder IPC 程序结构

    介绍binder service的服务端进程,客户端进程,ServiceManager进程三者之间的关系

  • 2) Binder的系统架构

    介绍Binder系统架构的层次划分,每个层次的作用,并详细介绍系统架构的适配层和核心库。

  • 3) Binder的本地库框架

  • 4) Binder的Java层框架

Binder IPC 程序结构

Binder IPC 程序结构如下图所示:

Binder IPC 程序结构

我们先从进程的角度来分析,Binder机制共涉及3个进程, 服务端进程,客户端进程,管理各种binder service的service manager进程。图中进程2是服务端进程,进程1是客户端进程,IServiceManager服务对象所在进程便是ServiceManager进程。

我们知道servicemanager进程是init进程解析init.rc启动的关键本地服务,但是多个binder service提供者可能在同一个进程里,并不是说每个binder service提供者都各自独占一个进程,象system_server进程就有多个binder service,比如activity manager service,package manager service,power manager service。

服务端进程启动后会获取IServiceManager的引用,然后调用它的addService方法在ServiceManager里注册binder service。客户端进程启动后也会获取IServiceManager的引用,然后调用它的getService方法获取binder service引用,再调用引用的方法。

我们再从程序框架角度分析,服务端进程的BnXXX和客户端进程的BpXXX同时实现了接口xxx,这里其实使用了代理模式,并且是远程代理。客户端进程通过IServiceManager获取的binder引用其实是一个IBinder指针,BpXXX会保存这个IBinder指针,BpXXX实现接口xxx的方法时都是通过IBinder指针提交一些信息到服务端进程,这些信息包括方法的参数信息,用于接收返回值的Parcel对象,代表某个方法的常量(不同的常量表示调用不同的方法)。IBinder指针提交信息其实是通过驱动层提交到服务端进程的。服务端进程实现BnXXX时,框架层最终会调用onTransact方法,根据不同的code调用不同的方法,并将结果返回给客户端。

参考资料

书《Android系统原理及开发要点详解》 第4章Android的底层库和程序


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值