当前位置: 首页 > news >正文

Android 基础技术——Binder 机制

笔者希望做一个系列,整理 Android 基础技术,本章是关于Binder 机制

什么是Binder

机制:Binder 是一种进程间通信机制

驱动:Binder 是一个虚拟物理设备驱动

应用层:Binder 是一个能发起通信的 Java 类

为什么要使用Binder

图解析:

性能上: binder小于共享内存 优于其他ipc

共享内存的缺点:  有 死锁和数据不同步(线程需要做同步处理)的风险

身份识别:依赖上层协议,知道PID(身份ID)可以调用服务, 可以伪造PID(由调用方来告知,可以伪造)。

binder uid 是唯一的,系统分配UID, 比较安全linux里的id:  组id, 用户id。

实名和匿名:系统服务是实名的,个人的注册服务(自己创建的Service,其他app也是拿不到)一般是匿名; 去servicemanager注册的是实名的。

Binder如何实现一次拷贝

回答:通过MMAP

Binder里 MMAP 的原理是啥

回答mmap原理:  让一块虚拟的内存指向一块已知的物理内存如文件, 返回一个文件句柄。然后我们直接操作这个文件句柄 就可以实现数据的一次拷贝。

mmap能够让虚拟内存和指定的物理内存直接联系起来。(记住这句话)

Binder 传输数据有没限制

如果传递的就是1M-8k 是否可以?  不行,因为还会包装,像网络协议一样

同步是1M-8k

异步是512K-4k

aidl是如何生成java类的细节
  1. aidl帮你生成java文件,你只需要写服务接口aidl 文件即可
  2. xxx.aidl 会生成 xxx.java 类 继承 android.os.IInterface, 有静态内部类 Stub 以及 Proxy
  3. Stub 继承 android.os.Binder 类 并且实现 xxx.java 接口;Proxy 实现 xxx.java 接口 。
  4. Stub 有一个 asInterface 接口,作用是区分是否同一个进程,如果是本地进程,返回的是接口xxx,如果是跨进程,返回的是 Proxy
  5. Stub 的 asBinder 接口返回的是this 本身Stub 是服务端对象
  6. Proxy 类内部持有一个成员变量mRemote:andorid.os.IBinder 对象,有一个方法叫asBinder,返回的是 mRemote
  7. Proxy 类会实现 xxx.java 里面的接口。实现接口的时候实际上是调用mRemote.transact(Parcel data, Parcel replay),调用transact 方法时候,客户端线程会被挂起。Proxy 是客户端对象
  8. mRemote.trancact 调用后,会进入到 Stub的onTransact 接口,根据不同的接口调用真正的服务接口,如果有数据返回则通过 reply 写入内容
  9. 服务连接后,客户端拿到的就是 Proxy 对象

相关文章:

Android 基础技术——Binder 机制

笔者希望做一个系列,整理 Android 基础技术,本章是关于Binder 机制 什么是Binder 机制:Binder 是一种进程间通信机制 驱动:Binder 是一个虚拟物理设备驱动 应用层:Binder 是一个能发起通信的 Java 类 为什么要使用Bind…...

【STM32 CubeMX】STM32中断体系结构

文章目录 前言一、中断体系的比喻二、中断的内部结构2.1 EXTI触发方式 2.2 NVIC2.3 cpu与中断2.4 外部中断控制器框图上升沿触发选择寄存器屏蔽/使能寄存器等待处理寄存器 2.5 中断优先级 总结 前言 一、中断体系的比喻 STM32中断体系如下图所示: 一座大型建筑物…...

JAVA高并发——JDK的并发容器

文章目录 1、超好用的工具类:并发集合简介2、线程安全的HashMap3、深入浅出ConcurrentHashMap3.1、ConcurrentHashMap的内部数据结构3.2、put()方法的实现3.3、get()方法的实现 4、有关List的线程安全5、高效读写的队列:深度剖析ConcurrentLinkedQueue类…...

代码随想录算法训练营day17||二叉树part04、110.平衡二叉树 、257. 二叉树的所有路径 、404.左叶子之和

注意:迭代法,可以先过,二刷有精力的时候 再去掌握迭代法。 110.平衡二叉树 (优先掌握递归) 再一次涉及到,什么是高度,什么是深度,可以巩固一下。 题目:给定一个二叉树&am…...

three.js 3D可视化地图

threejs地图 可视化地图——three.js实现 this.provinceInfo document.getElementById(provinceInfo); // 渲染器 this.renderer new THREE.WebGLRenderer({antialias: true }); this.renderer.setSize(window.innerWidth, window.innerHeight); this.container.appendChild…...

Unity所有关于旋转的方法详解

前言:欧拉角和四元数的简单描述 我们在Inspector面板上看到的rotation其实是欧拉角, 我们将Inspector面板设置成Debug模式,此时看到的local Rotation才是四元数。 Unity中的欧拉旋转是按照Z-X-Y顺规执行的旋转,一组欧拉旋转过程中…...

Vue3

目录 一、 Vue3简介 1. 性能的提升 2. 源码的升级 3. 拥抱TypeScript 4. 新的特性 二、 创建Vue3工程 1. 基于 vue-cli 创建 2. 基于 vite 创建(推荐) 3. 一个简单的效果 三、Vue3核心语法 1. OptionsAPI 与 CompositionAPI (1)Options API …...

浅谈业务场景中缓存的使用

浅谈缓存 一、背景二、缓存分类1.本地缓存2.分布式缓存 三、缓存读写模式1.读请求2.写请求 四、缓存穿透1.缓存空对象2.请求校验3.请求来源限制4.布隆过滤器 五、缓存击穿1.改变过期时间2.串行访问数据库 六、缓存雪崩1.避免集中过期2.提前更新缓存 七、缓存与数据库一致性1.设…...

Itext生成pdf文件,html转pdf时中文一直显示不出来

之前使用freemark模板渲染ftl页面,转出的pdf中,css2有些样式好像不支持,比较常用的居中样式都没有效果,text-align:center 改造成使用html页面来转pdf,css2的样式可以生效,itext是不支持css3的弹性布局的ITextRenderer pdfRendere…...

题目 1138: C语言训练-求矩阵的两对角线上的元素之和

问题描述: 求矩阵的两对角线上的元素之和 样例输入: 3 1 2 3 4 5 6 7 8 9 样例输出: 25 问题分析: 因为奇数阶矩阵的主对角线和副对角线上的元素有重复,偶数阶矩阵的主对角线和副对角线上的元素无重复&#x…...

第6讲自定义icon实现

自定义icon实现 component下新建SvgIcon目录&#xff0c;再新建index.vue 定义svg-icon组件 <template><svg class"svg-icon" aria-hidden"true"><use :xlink:href"iconName"></use></svg> </template>&…...

花费200元,我用全志H616和雪糕棒手搓了一台可UI交互的视觉循迹小车

常见的视觉循迹小车都具备有路径识别、轨迹跟踪、转向避障、自主决策等基本功能&#xff0c;如果不采用红外避障的方案&#xff0c;那么想要完全满足以上这些功能&#xff0c;摄像头、电机、传感器这类关键部件缺一不可&#xff0c;由此一来小车成本也就难以控制了。 但如果&a…...

AUTOSAR OS TASK

什么是TASK? 我们在裸机中跑代码,程序永远只能单活动流水执行,当程序需要等待的时候,CPU就一直在waiting状态,无法高效的利用CPU,这个时候就引入了并发运行需求。一个系统能同时执行多个不同活动的系统叫做并发系统。其中这个系统中的每个并发执行的活动都由TASK(任务)…...

陇剑杯 2021刷题记录

题目位置&#xff1a;https://www.nssctf.cn/上有 陇剑杯 2021 1. 签到题题目描述分析答案小结 2. jwt问1析1答案小结 问2析2答案小结 问3析3答案 问4析4答案 问5析5答案 问6析6答案 3. webshell问1析1答案 问2析2答案 问3析3答案 1. 签到题 题目描述 此时正在进行的可能是_…...

前端常见的设计模式

说到设计模式&#xff0c;大家想到的就是六大原则&#xff0c;23种模式。这么多模式&#xff0c;并非都要记住&#xff0c;但作为前端开发&#xff0c;对于前端出现率高的设计模式还是有必要了解并掌握的&#xff0c;浅浅掌握9种模式后&#xff0c;整理了这份文章。 六大原则&…...

OpenAI视频生成模型Sora的全面解析:从ViViT、扩散Transformer到NaViT、VideoPoet

前言 真没想到&#xff0c;距离视频生成上一轮的集中爆发(详见《Sora之前的视频生成发展史&#xff1a;从Gen2、Emu Video到PixelDance、SVD、Pika 1.0》)才过去三个月&#xff0c;没想OpenAI一出手&#xff0c;该领域又直接变天了 自打2.16日OpenAI发布sora以来(其开发团队包…...

3个密码学相关的问题

一、离散对数问题&#xff08;Discrete Logarithm Problem, DLP&#xff09; 问题描述&#xff1a;给定 有限阿贝尓群 G中的2个元素a和b&#xff0c;找出最小的正整数x满足&#xff1a;b a ^^ x &#xff08;或者证明这样的x不存在&#xff09;。 二、阶数问题&#xff08;O…...

5G网络eMBB、uRLLC、mMTC

ITU&#xff08;国际电信联盟&#xff09;于2015年9月正式定义了5G的三大应用场景&#xff1a;eMBB&#xff08;增强型移动宽带&#xff09;、uRLLC&#xff08;低时延高可靠通信&#xff09;、mMTC&#xff08;海量物联网通信&#xff09;。 eMBB是4G MBB&#xff08;移动宽带…...

matplotlib图例使用案例1.1:在不同行或列的图例上添加title

我们将图例进行行显示或者列显示后&#xff0c;只能想继续赋予不同行或者列不同的title来进行分类。比较简单的方式&#xff0c;就是通过ax.annotate方法添加标签&#xff0c;这样方法复用率比较低&#xff0c;每次使用都要微调ax.annotate的显示位置。比较方便的方法是在案例1…...

nginx 日志改为json格式

nginx 日志改为json格式 场景描述效果变更旧样式新样式 场景描述 正常使用nginx时&#xff0c;使用默认的日志输出格式&#xff0c;对于后续日志接入其他第三方日志收集、清洗环节&#xff0c;因分隔符问题可能不是很友好。 xxxx - - [19/Feb/2024:11:16:48 0800] "GET …...

《SpaceOS:空间操作系统白皮书(终极封神版)》——从“像素认知”到“空间计算”,构建现实世界的智能操作体系

&#x1f680;《SpaceOS&#xff1a;空间操作系统白皮书&#xff08;终极封神版&#xff09;》——从“像素认知”到“空间计算”&#xff0c;构建现实世界的智能操作体系&#xff08;镜像视界&#xff08;浙江&#xff09;科技有限公司原创技术体系&#xff09;&#x1f534; …...

你的旧笔记本也能跑AI了:用Ollama+WSL在Windows上低成本体验大模型

在Windows旧笔记本上低成本运行AI大模型的完整指南 你是否也曾经对着那些需要高端显卡才能运行的AI大模型望而却步&#xff1f;现在&#xff0c;即使是一台配置普通的Windows笔记本&#xff0c;也能轻松体验大语言模型的魅力。本文将带你一步步实现这个看似不可能的任务——不需…...

Java8时间魔法:Duration与Period实战,精准掌控时间与日期间隔

1. Duration与Period&#xff1a;Java8的时间魔法棒 第一次接触Java8的日期时间API时&#xff0c;我被LocalDate和LocalDateTime的简洁惊艳到了。但真正让我感受到时间魔法魅力的&#xff0c;是在处理两个时间点间隔时遇到的Duration和Period。记得有次做会员系统&#xff0c;…...

甩掉作图焦虑,我把商业级出图压缩到10分钟,设计团队必备AI工具推荐

作为一个在设计行业熬了快十年的工作室主理人&#xff0c;我无数次在甲方的要求下气的想撞墙——不是因为脑子里没有创意&#xff0c;而是因为团队的视觉交付效率根本跟不上客户“朝令夕改”的节奏。你如果是设计师一定懂这种窒息感&#xff1a;早会刚定下的视觉方向&#xff0…...

matlab(Octave) 绘图

1. ezplot plot &#xff0c; [plɒt] &#xff0c;vt. 绘图。 ezplot&#xff0c;easy to plot。用于绘制一元函数。 ezplot(expression,[左区间&#xff0c;右区间]) %语法 ezplot(1/x,[-10,10]); %例子,y1/x的图像图 1-1 ezplot作图&#xff0c;octave 2.mesh(x,y,z) 用于作…...

5G NR物理层控制信令实战:从PDCCH盲解码到DCI格式解析

5G NR物理层控制信令实战&#xff1a;从PDCCH盲解码到DCI格式解析 在5G新空口&#xff08;NR&#xff09;系统中&#xff0c;物理层控制信令是实现高效资源调度和可靠数据传输的核心机制。作为无线通信协议栈开发工程师和网络优化人员&#xff0c;深入理解PDCCH盲解码机制、COR…...

别再用ChatGPT写代码了!试试Cursor的Ctrl+K和Ctrl+L,效率提升不止一倍

从ChatGPT到Cursor&#xff1a;AI编程助手的效率革命 1. 为什么开发者需要更高效的AI编程工具&#xff1f; 在过去的两年里&#xff0c;AI编程助手已经从科幻概念变成了开发者日常工作的一部分。ChatGPT等通用AI工具虽然强大&#xff0c;但在专业编程场景中仍存在诸多局限&…...

从本体论到落地实践:制造业数字化转型的核心逻辑与工具选择

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

LAN Chat Room:如何在没有互联网的环境中实现高效局域网通讯?

LAN Chat Room&#xff1a;如何在没有互联网的环境中实现高效局域网通讯&#xff1f; 【免费下载链接】LAN-Chat-Room &#x1f609;基于QT开发的局域网聊天室 项目地址: https://gitcode.com/gh_mirrors/la/LAN-Chat-Room 在当今高度依赖互联网的通讯环境中&#xff0c…...

OpenClaw技术写作助手:Qwen2.5-VL-7B自动生成带示意图的教程

OpenClaw技术写作助手&#xff1a;Qwen2.5-VL-7B自动生成带示意图的教程 1. 为什么需要自动化技术写作 作为一名长期与技术文档打交道的开发者&#xff0c;我经常面临一个矛盾&#xff1a;既要保证文档的专业性和完整性&#xff0c;又要应对快速迭代的开发节奏。传统文档创作…...