Binder基本知识

news2024/11/24 3:44:18

1:IPC 原理

从进程角度来看 IPC 机制

每个 Android 的进程,只能运行在自己进程所拥有的虚拟地址空间。对应一个4GB 的虚拟地址空间,其中 3GB 是用户空间,1GB 是内核空间,当然内核空间的大小是可以通过参数配置调整的。对于用户空间,不同进程之间彼此是不能共享的,而内核空间却是可共享的。Client 进程向 Server 进程通信,恰恰是利用进程间可共享的内核内存空间来完成底层通信工作的,Client 端与Server 端进程往往采用 ioctl 等方法跟内核空间的驱动进行交互。

如图所示:

2:Binder 原理

Binder 通信采用 C/S 架构,从组件视角来说,包含 Client、Server、ServiceManager 以及 binder 驱动,其中 ServiceManager 用于管理系统中的各种服务。架构图如下所示:

可以看出无论是注册服务和获取服务的过程都需要 ServiceManager,需要注意的是此处的 Service Manager 是指 Native 层的 ServiceManager(C++),并非指 framework 层的 ServiceManager(Java)。

/frameworks/base/core/java/android/os/ServiceManager.java

在这里主要是想查看:ServiceManager.cpp是哪个文件里面的?

public static native IBinder waitForService(@NonNull String name);

在这里注册的:frameworks/base/core/jni/android_os_ServiceManager.cpp

frameworks/native/cmds/servicemanager/ ServiceManager.cpp

ServiceManager 是整个Binder 通信机制的大管家,是 Android 进程间通信机制 Binder 的守护进程,要掌握Binder 机制,首先需要了解系统是如何首次启动 Service Manager。当Service Manager 启动之后,Client 端和 Server 端通信时都需要先获取Service Manager 接口,才能开始通信服务。

图中 Client/Server/ServiceManager 之间的相互通信都是基于Binder 机制。既然基于 Binder 机制通信,那么同样也是 C/S 架构,则图中的3 大步骤都有相应的Client 端与 Server 端。

 1. 注 册 服 务 (addService) : Server 进 程 要先注册Service到ServiceManager。该过程:Server 是客户端,ServiceManager 是服务端。

2. 获 取 服 务 (getService) : Client 进 程 使 用 某个Service 前,须先向ServiceManager 中获取相应的 Service。该过程:Client 是客户端,ServiceManager 是服务端。

3. 使用服务:Client 根据得到的 Service 信息建立与Service 所在的Server 进程通信的通路,然后就可以直接与 Service 交互。该过程:client 是客户端,server 是服务端。

图中的 Client,Server,Service Manager 之间交互都是虚线表示,是由于它们彼此之间不是直接交互的,而是都通过与 Binder 驱动进行交互的,从而实现IPC通信方式。其中 Binder 驱动位于内核空间,Client,Server,Service Manager 位于用户空间。Binder 驱动和 Service Manager 可以看做是Android 平台的基础架构,,而 Client 和 Server 是 Android 的应用层,开发人员只需自定义实现client、Server 端,借助 Android 的基本平台架构便可以直接进行IPC 通信。

3 C/S 模式

BpBinder(客户端)和 BBinder(服务端)都是 Android 中Binder 通信相关的代表,它们都从 IBinder 类中派生而来,关系图如下:

client 端:BpBinder.transact()来发送事务请求;

server 端:BBinder.onTransact()会接收到相应事务。

 

 

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

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

相关文章

网络安全之密码学

目录 密码学 定义 密码的分类 对称加密 非对称加密 对称算法与非对称算法的优缺点 最佳解决办法 --- 用非对称加密算法加密对称加密算法的密钥 非对称加密如何解决对称加密的困境 密钥传输风险 密码管理难 常见算法 对称算法 非对称算法 完整性与身份认证最佳解决…

优维低代码:定制构件的打包及部署

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 连载…

用Python写一个BMI计算代码

有粉丝问我怎么写一个BMI算法,安排 height float(input("请输入身高(米): ")) weight float(input("请输入体重(千克): ")) 计算BMI bmi weight / (height ** 2) 显示结果 print("您的…

MySQL8.0.32安装以及环境配置

文章目录一、安装MySQL二、错误集1. 如果操作失误,可以重新安装一、安装MySQL 下载MySQL的社区版的压缩包:https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.32-winx64.zip 将压缩包解压到你要安装的目录中 将对应的安装路径添加到环境变量中…

Java面试核心知识点梳理(二)——Java集合

文章目录前言1. List1.1 ArrayList(数组)1.2 Vector(数组、线程安全)1.3 LinkedList(链表)2. Set2.1 HashSet(Hash表)2.2 TreeSet(二叉树)2.3 LinkHashSet&am…

3分钟通过日志定位bug,这个技能测试人必须会

♥ 前 言 软件开发中通过日志记录程序的运行情况是一个开发的好习惯,对于错误排查和系统运维都有很大帮助。 Python 标准库自带了强大的 logging 日志模块,在各种 python 模块中得到广泛应用。 一、简单使用 1. 入门小案例 import logging logging.ba…

国内Google翻译失效的解决方法(MAC/WIN)

Google宣布停止在中国大陆的翻译服务,原因是:使用率低??,这导致Chrome浏览器网页翻译失效。对于一些使用Chrome,经常鼠标下一秒就在大洋彼岸扒拉资料,且英语不太好的同学来说变得非常难受。为此…

【软考中级·网络工程师】校验码差错控制

差错控制🍉 无论通信系统如何可靠,都不能做到完美无缺。因此,必须考虑怎样发现和纠正信号传输重的差错。通信过程中出现的差错大致可以分为两类: 一类是由热噪声引起的随机错误;热噪声:一种由电子的热运动…

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升

专题一 空间数据获取与制图 1.1 软件安装与应用讲解 1.2 空间数据介绍 1.3海量空间数据下载 1.4 ArcGIS软件快速入门 1.5 Geodatabase地理数据库 ​ 专题二 ArcGIS专题地图制作 2.1专题地图制作规范 2.2 空间数据的准备与处理 2.3 空间数据可视化:地图符号…

无头盔PICO-unity开发日记3(UI按钮点击)

目录 1.UI界面加入组件 2.加入xr输入模块 3.设置光线投射遮罩 结果: 前提:做好一个ui界面 1.UI界面加入组件 画布加跟踪设备图形光线投射仪(tracked device graphic raycaster) 允许画布被追踪设备操纵 2.加入xr输入模块 sys…

C++ --模拟实现搜索二叉树

文章目录#搜索二叉树1. 搜索二叉树特点2. 操作分析2.0 结点结构2.1 插入2.2 升序查看2.3 查找2.4 删除2.5 前序拷贝构造3. 完整代码4. 时间复杂度分析5. 简单应用5.1 字典搜索5.2 统计次数#搜索二叉树 1. 搜索二叉树特点 若它的左子树不为空,则左子树上所有节点的…

Dockerfile及新型容器镜像构建技术

文章目录一、容器镜像分类1、操作系统类2、应用类二、容器镜像获取方法1、在dockerhub直接下载2、把操作系统中文件系统打包为容器镜像3、把正在运行的容器打包为容器镜像,即docker commit4、通过dockerfile实现容器镜像的自定义以及生成三、dockerfile1、dockerfil…

数据库管理系统PostgreSQL部署安装完整教程

PostgreSQL是一个开源的关系型数据库管理系统,它支持大量的数据类型和复杂的查询语言,可以用于各种应用程序。它是一个高性能的数据库,可以处理大量的数据,并且具有良好的可扩展性和可靠性。 目录 一.Linux系统安装PostgresSQL&a…

机器学习——线性模型之Softmax回归

问:Softmax回归模型是一种典型处理多分类任务的非线性分类模型 答:错误。Softmax回归是线性分类模型。实际上是逻辑回归的拓展,它将逻辑回归的二分类推广到了多分类,用逻辑回归的方法解决多分类问题。 线性模型——Softmax回归 …

Linux之基础IO

文章目录一.关于文件的共识二.复习C语言的文件操作1.打开文件2.向文件中写入数据3.向文件中追加数据三.有关文件的系统调用1.open(文件打开)2.write(向文件写入)3.read(读文件)四.文件描述符1.进程如何找到自己的文件2.为什么文件…

leetcode刷题(3)

各位朋友们大家好,今天是我leedcode刷题系列的第三篇,废话不多说,直接进入主题。 文章目录分割链表题目要求用例输入提示做题思路c语言代码实现Java代码实现相交链表题目要求用例输入提示做题思路c语言实现代码Java代码实现分割链表 leetcod…

KDSL-82轻型升流器

一、产品概述 KDSL-82 1000A大电流发生器是一种作为检验用的电流源,大电流试验器采用ARM芯片控制输出工艺和大容量的环形变压器,并且配有液晶屏显示的表计,同时显示一、二次电流、变比和秒表接点(或电位)的动作时间。外配铝合金机箱&#xff…

OceanMind海睿思受邀参加中小企业数字化转型发展论坛

近日,由江苏省企业信息化协会主办的中小企业数字化转型发展论坛于南京圆满结束。论坛重点邀请了南京市中小企业制造标杆、专精特新“小巨人”企业等相关信息化负责人和IT工作者共同探讨中小企业数字化转型的发展路径。 OceanMind海睿思作为南京地区大数据领域优秀代…

自然语言大模型介绍

1 简介 最近一直被大语言模型刷屏。本文是周末技术分享会的提纲,总结了一些自然语言模型相关的重要技术,以及各个主流公司的研究方向和进展,和大家共同学习。 2 Transformer 目前的大模型基本都是Transformer及其变种。本部分将介绍Transf…

FPGA基于XDMA实现PCIE X4的HDMI视频采集 提供工程源码和QT上位机程序和技术支持

目录1、前言2、我已有的PCIE方案3、PCIE理论4、总体设计思路和方案5、vivado工程详解6、驱动安装7、QT上位机软件8、上板调试验证9、福利:工程代码的获取1、前言 PCIE(PCI Express)采用了目前业内流行的点对点串行连接,比起 PCI …