【安卓跨进程通信IPC】-- Binder
目录
- Binder
- Binder是什么?
- 进程空间分配
- 进程隔离
- Binder跨进程通信机制模型
- 优点
- AIDL
- 常见面试题
Binder
夯实基础之超详解Android Binder的工作方式与原理以及aidl示例代码
比较详细的介绍:Android跨进程通信:图文详解 Binder机制 原理
操作系统:图文详解 内存映射
一篇短的介绍:Binder原理解析
很详细的介绍:Android之Binder原理剖析
Android跨进程通信:图文详解 Binder机制 原理
Android之Binder原理剖析
Binder核心原理解析
binder面试题:
【干货满满】关于Binder的一些面试问题
Binder是什么?
是一种IPC方式;
是一种虚拟的物理设备驱动,即Binder驱动,连接service进程、client进程和ServiceManager进程的纽带;
从安卓代码的实现角度,binder是一个类,实现了IBinder接口。
进程空间分配
用户空间:进程间相互隔离
内核空间:进程间共享
进程内用户空间和内核空间进行交互需通过系统调用来实现:copy_from_user()和copy_to_user()
进程隔离
为了保证 安全性 & 独立性,一个进程 不能直接操作或者访问另一个进程,即Android的进程是相互独立、隔离的。
传统的IPC通信需要做2次数据拷贝:用户空间->内核空间->用户空间,效率低下。
而Binder的作用则是:连接两个进程,通过调用mmap()内存映射系统函数,主要负责创建数据接收的缓存空间 & 管理数据接收缓存,最终通过1次数据拷贝就实现了两个进程间的数据通信。
Binder跨进程通信机制模型
是基于Client-Server模式。
基本的流程:(详细流程见原链接)
- server进程通过binder驱动向ServiceManager注册服务,binder驱动将注册信息同步给Service Manager进行管理;
Binder实体是Server进程在Binder驱动中的存在形式;该对象保存Server和ServiceManager的信息(保存在内核空间中);Binder驱动通过内核空间的Binder实体找到用户空间的Server对象。 - client进程通过向binder驱动发送获取指定服务的请求,传递要获取的服务名称,binder驱动通过Servcie Manager找到对应的binder实体,发挥实体引用给client进程;
- client进程通过binder实体引用使用服务。
binder驱动:一种虚拟设备驱动,连接server进程、client进程和Service Manager的桥梁,具体作用:
- 传递进程间的数据:通过内存映射,数据拷贝1次,传输效率高;
- 实现线程控制:采用Binder线程池,并由Binder驱动自身进行管理。
Binder驱动持有每个server进程在内核空间中的binder实体,并给client进程提供binder实体的引用。
内存映射:
- binder驱动创建一块接收缓存区;
- 实现地址映射关系:实现内核缓存区和接收进程用户空间地址同时映射到同一个共享接收缓存区;
- 发送进程通过copy_from_user()发送数据到虚拟内存区域;
- 由于内核缓存区和接收进程的用户空间地址存在映射关系,故相当于也发送到了接收进程的用户空间地址,即实现了跨进程通信。
说明:
- Client进程、Server进程 & Service Manager 进程之间的交互 都必须通过Binder驱动(使用 open 和 ioctl文件操作函数),而非直接交互。
- Binder驱动 & Service Manager进程 属于 Android基础架构(即系统已经实现好了);而Client 进程 和 Server 进程 属于Android应用层(需要开发者自己实现)
- Binder请求的线程管理:Binder模型的线程管理 采用Binder驱动的线程池,并由Binder驱动自身进行管理;一个进程的Binder线程数默认最大是16,超过的请求会被阻塞等待空闲的Binder线程。
优点
- 高效:数据拷贝只需要1次,而管道、消息队列、Socket都需要2次,通过驱动在内核空间拷贝数据,不需要额外的同步处理。
- 安全性高:Binder机制为每个进程分配了UID/PID作为鉴别身份的标志,在Binder通信时会根据其进行有效性检测;传统的IPC方式对于双方的身份并没有做出严格的验证,如Socket通信ip地址都是客户端手动填入,容易出现伪造。
- 使用简单:采用CS架构,有AIDL机制使得开发者能够更加容易的使用和集成。
AIDL
Android:学习AIDL,这一篇文章就够了(上)
你真的理解AIDL中的in,out,inout么?
常见面试题
【干货满满】关于Binder的一些面试问题
面试 | 再也不怕被问 Binder 机制了
Android中进程和线程的关系,区别?
为何需要进行IPC,多进程通信可能会出现什么问题?
Android中IPC方式有几种、各种方式优缺点? 为何新增Binder来作为主要的IPC方式?
什么是Binder?
Binder的原理?
Binder Driver 如何在内核空间中做到一次拷贝的?
Binder 驱动加载过程中有哪些重要的步骤?
系统服务是什么时候注册的?
使用Binder进行数据传输的具体过程?
Binder框架中ServiceManager的作用?
系统服务与bindService启动的服务的区别?
系统服务与bindService等启动的服务的区别
【Android话题-2.4系统服务】系统服务和bind的应用服务有什么区别
Activity的bindService流程?
bindService方法流程
Android进阶笔记:bindService的流程–源码解析
Android四大组件系列6 bindService流程
使用 Binder 传输一次数据的最大限制是多少,被占满后会导致什么问题?
什么是AIDL?
AIDL使用的步骤?
AIDL支持哪些数据类型?
AIDL的关键类,方法和工作流程?
如何优化多模块都使用AIDL的情况?
不通过AIDL,手动编码来实现Binder的通信?
相关文章:
【安卓跨进程通信IPC】-- Binder
目录 BinderBinder是什么?进程空间分配进程隔离Binder跨进程通信机制模型优点AIDL常见面试题 Binder 夯实基础之超详解Android Binder的工作方式与原理以及aidl示例代码 比较详细的介绍:Android跨进程通信:图文详解 Binder机制 原理 操作系统…...

大数据之Schedule调度错误(一)
当我们在利用ooize发起整个任务的调度过程中,如果多个调度任务同时运行并且多个调度任务操作了相同的表,那么就会出现如下的错误关系: Invalid path hdfs://iZh5w01l7f8lnog055cpXXX:8000/user/admin/xxx: No files matching path hdfs://iZh5w01l7f8lnog055cpXXX:8000/user/ad…...

DiffIR论文阅读笔记
ICCV2023的一篇用diffusion模型做Image Restoration的论文,一作是清华的教授,还在NIPS2023上一作发表了Hierarchical Integration Diffusion Model for Realistic Image Deblurring,作者里甚至有Luc Van Gool大佬。模型分三个部分,…...

prometheus+alertmanager+webhook钉钉机器人告警
版本:centos7.9 python3.9.5 alertmanager0.25.0 prometheus2.46.0 安装alertmanager prometheus 配置webhook # 解压: tar -xvf alertmanager-0.25.0.linux-amd64.tar.gz tar -xvf prometheus-2.46.0.linux-amd64.tar.gz mv alertmanager-0.25.0.linu…...
ctfshow 年CTF web
除夕 Notice: Undefined index: year in /var/www/html/index.php on line 16 <?phpinclude "flag.php";$year $_GET[year];if($year2022 && $year1!2023){echo $flag; }else{highlight_file(__FILE__); } 弱比较绕过很简单,连函数都没有直…...
原型链、闭包、手写一个闭包函数、 闭包有哪些优缺点、原型链继承
什么是原型链? 原型链是一种查找规则 为对象成员查找机制提供一个方向 因为构造函数的 prototype 和其实例的 __ proto __ 都是指向原型对象的 所以可以通过__proto__ 查找当前的原型对象有没有该属性, 没有就找原型的原型, 依次类推一直找到Object( null ) 为…...
linux中SSH_ASKPASS全局变量的作用
在工作中遇到一段代码,通过SSH_ASKPASS全局变量实现了ssh登录远程IP时的密码输入,chatgpt搜索了一下,其解释大致如下所示: SSH_ASKPASS 是一个环境变量,它在 SSH 客户端需要用户输入密码时起作用。当 SSH 客户端检测到…...

9 -力扣高频 SQL 50 题(基础版)
9 - 上升的温度 -- 找出与之前(昨天的)日期相比温度更高的所有日期的 id -- DATEDIFF(2007-12-31,2007-12-30); # 1 -- DATEDIFF(2010-12-30,2010-12-31); # -1select w1.id from Weather w1, Weather w2 wheredatediff(w1.recordDate,w2.recordDat…...

TCP的重传机制
TCP 是一个可靠的传输协议,解决了IP层的丢包、乱序、重复等问题。这其中,TCP的重传机制起到重要的作用。 序列号和确认号 之前我们在讲解TCP三次握手时,提到过TCP包头结构,其中有序列号和确认号, 而TCP 实现可靠传输…...
pg 数据库,获取时间字段值的具体小时,赋值给其他字段
目录 1 问题2 实现 1 问题 pg 数据库,有一个表,其中有2个字段 一个是时间字段obstime ,一个是时次ltime字段,int 类型,现在这个表里面是obstime 里面有数据,ltime字段 没有数据,现在就是批量获…...

做视频号小店什么类目最容易爆单?其实,弄懂这三点就会选品了
大家好,我是电商花花。 我们做视频号小店做什么类目最容易爆单? 其实任何类目都有属于自己的受众人群和客户,都非常容易爆单,我们想要爆单,就要选对类目,选对产品。 视频号上所有的类目基本上可以分为标…...

Nginx作为下载站点
grep -Ev ^$|# /usr/local/nginx/conf/nginx.conf > /opt/nginx.txt cat /opt/nginx.txt > /usr/local/nginx/conf/nginx.conf用上面的指令提取最小化的配置文件 vim /usr/local/nginx/conf/nginx.conf [rootlocalhost ~]# cat /usr/local/nginx/conf/nginx.conf worker…...

vue3简单快速实现主题切换功能
⛰️个人主页: 蒾酒 🔥系列专栏:《vue3实战》 目录 内容概要 实现步骤 1.定义不同主题的css样式变量 2.入口main.ts中引入这个样式文件 3.主题样式css变量引用 4.设置默认主题样式 5.实现点击按钮主题切换 总结 最近发现了一个巨牛的人工智…...

国联易安:网络反不正当竞争,要防患于未然
据市场监管总局官网消息,为预防和制止网络不正当竞争,维护公平竞争的市场秩序,鼓励创新,保护经营者和消费者的合法权益,促进数字经济规范健康持续发展,市场监管总局近日发布《网络反不正当竞争暂行规定》&a…...
Linux 网络配置 01
基本命令 1、查看网络接口信息ifconfig ifconfig:当前设备正在工作的网卡,启动的设备 ifconfig -a :所网络设备 ifconfig信息解析: ens33: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.10 n…...

快速入门C++正则表达式
正则表达式(Regular Expression,简称 Regex)是一种强大的文本处理工具,广泛用于字符串的搜索、替换、分析等操作。它基于一种表达式语言,使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。正则表达式不仅在…...
java —— 缓冲字符输入流/缓冲字符输出流
缓冲字符输入流/缓冲字符输出流是对字符输入流/字符输出流的加强,在使用中仍旧要借助于字符输入流/字符输出流才能完成实现。与字符输入流/字符输出流按照字符为单位进行输入/输出不同的是,缓冲字符输入流/缓冲字符输出流能够以行为单位进行读取和写入。…...
blender从视频中动作捕捉,绑定到人物模型
总共分为3个步骤: 1、从视频中捕捉动作模型 小K动画网-AIGC视频动捕平台 地址:https://xk.yunbovtb.com/ 需要注册 生成的FBX文件,不能直接导入到blender中, 方法有2种: 第一种:需要转换一下&#x…...

掘金滑块验证码安全升级,继续破解
去年发过一篇文章,《使用前端技术破解掘金滑块验证码》,我很佩服掘金官方的气度,不但允许我发布这篇文章,还同步发到了官方公众号。最近发现掘金的滑块验证码升级了,也许是我那篇文章起到了一些作用,逼迫官…...

数据结构练习题——Java实现
20240531-时间复杂度 1、消失的数字 方法一:位运算 两个数字一样的数组,其中一个数组中少了一个数字,定义一个变量分别异或两个数组,结果即为缺少的数字 class Solution {public int missingNumber(int[] nums) {int xor 0;int…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...