Binder通信的核心思想

news2024/11/25 14:40:07
Binder到底是什么?Binder通信到底是怎么实现的?脱离复杂的Android Framework代码,用最简单的方式来理解下什么是Binder通信。

关于IPC通信

在Linux系统中,正常运行的两个进程A和B,它们之间如果要进行数据的通信,需要借助Linux的IPC通信机制,如消息,共享内存,信号量等。也就是说在Linux系统中,如果要让两个进程进行通信,一定要通过IPC机制。而Android系统是建立在Linux系统基础之上的,因此Android的两个进程之间的通信,也必然要通过IPC机制。原来的工作方式是这样的:

关于RPC通信

在Android系统时,有时进程A需要访问进程B的接口,假设进程B的主要功能是负责LED灯的开与关,即进程B提供LEDOpen(), 或LEDClose(), 但是进程A无法,并且也没有权限去直接调用进程B的这两个接口。于是,有一个解决方案就是,进程A封装一些参数,比如int which(哪个LED), int state(灯的状态:1开/0关),进程A把进程B调用LEDOpen()或LEDClose()的关键的信息参数封装了一下,然后通过Linux系统的IPC机制,将封装好的参数发送给进程B, 进程B拿到这些参数后,进行解析,得到具体的参数int which(哪个LED), int state(灯的状态:1开/0关),然后调用相应的API, 实现了真正的LED开关操作。这整个过程称为RPC.
下面用一幅图来表示这个过程:

 

这样就可以给人一种感觉,好像是进程A在直接调用服务接口,而以上的内容本质上就是Binder通信的核心。

关于Binder通信

进一步思考,对于通信,一般都涉及三个因素:发送方,接收方和发送内容。对于上面的例子中发送方是进程A,接收方是进程B, 发送的内容就是封装的数据。 但是身为发送方的进程A,怎么知道接收方B,换句话说,进程A怎么找到进程b,或者进程B在进程A中是以什么样的方式存在呢?这时就一定要引入第三者。
现在做个约定,发送方称为Client客户端 ,接收方称为Server服务端,因为接收方是为发送方提供服务接口的,它拥有发送方所需要的功能或处理函数。将引入的第三者称之为ServiceManager.于是就有了下面这张图:

 

第一步:Server服务端在为他们提供服务之前,需要向服务管理中心即ServiceManager注册自己
第二步:ServiceManager(简称SM)注册成功后,将Server的信息保存在一张表中。
第三步:Client客户端要使用Server服务端提供服务之前,需要先向SM查找Server服务端,获得Server端的使用凭证,类似一个Handle
第四步:SM收到查询请求后,查到到信息表,找到Server服务端后,将Server的句柄返回给Client客户端。
第五步:Client客户端开始打包数据。
第六步:发送数据(通过Binder驱动)
第七步:Server服务端收到数据,开始解析数据
第八步:Server根据得到的数据进行函数调用
第九步:Server端将函数的执行结果返回给Client客户端,客户端后收到,根据执行结果进行下一步处理。

关于参数打包

上面描述的是Binder通信的全过程,需要有个第三方中介来保存Server的信息,借助第三方中介提供的信息,客户端Client可以轻松获得Server提供的服务handle,这个handler可以代表Server的实体 ,通过它,就可以实现与Server的通信了,但是通信之前,在Client端需要做一个工作,数据的打包,数据打包有什么讲究?
需要搞清楚以下两个问题:
(1) Server提供哪几个服务(函数),Server怎么知道Client要调用的是哪个函数?
解决:可以对函数进行编号,称为code, 如LEDOpen()编为code = 1, LEDClose()编为code=2
(2) Client要传哪 些参数过去?参数怎么传?
解决:可以将参数打包放到buffer中,双方约定好以client打包的方式逆向操作去解析。
Server收到数据包后,解析出code,就能知晓要调用哪个函数,解析出参数后,这个就是函数调用的实参。这样一来,Server端就能正常解析并执行函数了,这样就完成了一次完整的Binder通信过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/922801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iview时间控件 动态不可选日期 可选择24小时范围内 时间往后退24小时

演示 html 设定 起始时间 触发on-change 方法结束时间 options 动态设置不可选择的日期。 <!-- 起始时间 --> <FormItem :label"$t(startTime)" prop"startTime"><DatePickertransfertype"datetime":placeholder"$t(pleas…

文件和IO的核心API

操作文件 public static void main(String[] args) throws IOException {//创建一个文件对象&#xff0c;并且指向某个路径File file new File("C:\\Users\\1162\\Desktop\\1.trx");//创建文件System.out.println(file.exists());boolean newFile file.createNewFi…

Mysql-InnoDB数据页结构

一、页结构说明 大致分7部分 二、记录在页中的存储 2.1 页面记录内存结构 行格式 存储到 User Records 部分&#xff0c;每当我们插入一条记录&#xff0c;都会从 Free Space 部分申请一个记录大小的空间划分到 User Records 部分 &#xff0c;用完则申请新的页&#xff1b; …

Vue中使用element-plus中的el-dialog定义弹窗-内部样式修改-v-model实现-demo

效果图 实现代码 <template><el-dialog class"no-code-dialog" v-model"isShow" title"没有收到验证码&#xff1f;"><div class"nocode-body"><div class"tips">请尝试一下操作</div><d…

用香港服务器域名需要备案吗?

​  在选择服务器的时候&#xff0c;很多人会考虑使用香港服务器。香港服务器的一个优势就是不需要备案。不管是虚拟主机还是云主机&#xff0c;无论是个人网站还是商业网站&#xff0c;都不需要进行备案手续。 域名实名认证 虽然不需要备案&#xff0c;但使用香港服务器搭建…

Doris安装及使用

Doris简介 Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以极速易用的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点查询场景&#xff0c;也能支持高吞吐的复杂分析场景。基于…

怎么做出老板看得懂的财务数据分析报表?

财务数据分析报表的主要作用就是为决策提供必不可少的数据信息&#xff0c;让老板以及管理层在充分了解企业现金流情况、债务能力、还债能力、进账情况等财务信息后&#xff0c;更科学地做出运营管理决策。因此&#xff0c;财务数据分析报表必须做得直观易懂&#xff0c;毕竟不…

Linux监控基础命令

Linux资源监控 一.资源监控常用命令汇总 内存&#xff1a;top、free、vmstat、pmap I/O&#xff1a;vmstat、sar CPU&#xff1a;top、vmstat、mpstat、iostat 二.监控命令 日常检测使用top和free就足够了&#xff0c;如果要对系统进行日常监控可以使用zabbix或者prometh…

微软宣布在 Excel 中使用 Python:结合了 Python 的强大功能和 Excel 的灵活性。

自诞生以来&#xff0c;Microsoft Excel 改变了人们组织、分析和可视化数据的方式&#xff0c;为每天使用它的数百万人提供了决策基础。今天&#xff0c;我们宣布发布 Excel 中的 Python 公共预览版&#xff0c;从而使 Excel 中的分析功能取得重大进展。 Excel 中的 Python 可…

网易2023年Q2财报:营收240亿元,游戏技术跨产业创造数字就业

8月24日&#xff0c;网易发布2023年Q2财报。二季度&#xff0c;网易继续聚焦主营业务&#xff0c;业绩表现稳健&#xff1b;净收入240亿元&#xff0c;非公认会计准则下归属于公司股东的持续经营净利润90亿元&#xff0c;研发投入39亿元&#xff0c;相当于拿出近一半利润投入研…

同城分类信息便民公众号抖音百度支付宝小程序开发

同城分类信息便民公众号抖音百度支付宝小程序开发 用户注册和登录功能&#xff1a;允许用户通过手机号或第三方账号登录&#xff0c;并进行个人信息补充和修改。发布信息功能&#xff1a;用户可以发布需要出售或者需要购买的商品、服务或者其他资源信息&#xff0c;并填写详细…

专访 Hyper Oracle:可编程的 zkOracle 打造未来世界的超算

许多 Web3 应用在实现的过程中&#xff0c;常常会遇到基础设施方面的限制&#xff0c;包括去中心化自动化、预言机、链上信息搜索等问题。绝大部分区块链的中间件网络都是依赖于节点质押来保证节点执行的诚实性&#xff0c;这样的模式会产生诸多衍生问题&#xff0c;例如安全性…

linux centos7 sort命令的学习与训练

sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项&#xff0c;这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上&#xff0c;sort命令可以被认为是一个非常强大的数据管理工具&#xff0c;用来管理内容类似数据库记录的文件。 sort…

Centos7防火墙启动失败问题

下面记录一下防火墙启动失败问题排查和解决的过程。防火墙启动失败的错误信息如下&#xff1a; ERROR: Exception DBusException: org.freedesktop.DBus.Error.AccessDenied: Conn...n file 比较郁闷的地方是之前防火墙是正常启动的&#xff0c;后面不知道服务器修改了什么配置…

[MyBatis系列②]Dao层开发的两种方式

目录 1、传统开发 1.1、代码 1.2、存在的问题 2、代理开发 2.1、开发规范 2.2、代码 ⭐mybatis系列①&#xff1a;增删改查 1、传统开发 传统的mybatis开发中&#xff0c;是在数据访问层实现相应的接口&#xff0c;在实现类中用"命名空间.id"的形式找到对应的映…

ARM汇编【5】:STACK AND FUNCTIONS

在这一部分中&#xff0c;我们将研究称为堆栈的进程的一个特殊内存区域。本章介绍了Stack的用途和相关操作。此外&#xff0c;我们还将介绍ARM中函数的实现、类型和差异。 STACK 一般来说&#xff0c;堆栈是程序/进程中的一个内存区域。这部分内存是在创建进程时分配的。…

《信息安全技术 数据安全风险评估方法》(征求意见稿)解读

8月21日&#xff0c;全国信息安全标准化技术委员会秘书处发布关于征求国家标准《信息安全技术 数据安全风险评估方法》&#xff08;征求意见稿&#xff09;意见的通知&#xff0c;面向社会广泛征求意见。 一、数据安全相关政策法规 此前&#xff0c;国家也发布了多部数据安全相…

dockerfile镜像及Harbor私有仓库搭建的应用

目录 搭建私有仓库harbordockerfile构建镜像1&#xff0c;先创建一个目录2&#xff0c;编写dockerfile3&#xff0c;构建4&#xff0c; 验证镜像5&#xff0c;标记镜像6&#xff0c;上传镜像 搭建私有仓库harbor 首先安装容器编排工具&#xff1a;docker compose 我使用的是离…

企业如何做好实施数字工厂管理系统前的需求分析

随着工业4.0的到来&#xff0c;数字工厂系统解决方案已经成为企业提高生产效率、优化资源配置和提升产品质量的重要工具。在考虑实施数字工厂管理系统之前&#xff0c;企业需要进行详细的需求分析&#xff0c;以确保系统的实施能够真正满足企业的业务需求。本文将探讨企业如何做…

基于Spark框架的新闻推荐系统的设计与实现

1.摘要 离线ALS算法,以及基于内容的推荐算法进行结合.实时计算部分,使用Spark平台上的Spark Streaming流处理技术,处理日志收集框架Flume收集的日志信息. 2.需要的技术 jieba分词工具 LDA分词处理技术 LDA(Latent Dirichlet Allocatio