android binder入门(三)——设计原理和模型介绍

Android之Binder原理剖析 binder 阅读详情

本文基于上一篇文章android binder入门(二)——手动实现,进一步讲解原理

1、优势

android是在Linux基础上进行开发出的一套系统,Linux进程间通信包括几种方式:共享内存、管道、socket、消息队列、binder。
共享内存:优点就是无需进行拷贝数据,客户端和服务端都可以直接对内存中的数据进行操作,这样操作读取速度很快,但是需要很大的内存,这方面在手机上实现是很困难的,并且安全性无法保证,任何app都可以操作这部分数据,导致数据很乱
管道、socket、消息队列:操作过程都是,服务端先将数据copy到内核缓存区,客户端需要数据操作的时候,也要将内核缓存区的数据copy到自己的内存空间内,这就进行了两次copy,消耗性能很大,尤其是android手机,对性能要求更高,完全不符合标准
在这里插入图片描述

binder:copy数据就是介于上面两者之间,服务端将内存中的数据copy到内核缓存区,同时对外提供操作的地址映射,客户端就可以通过映射对数据进行操作,无需copy到自己的内存空间,这样就进行了一次copy,节约了性能。并且ServiceManager给每个binder设置了一个标志UID,保证了只能访问对应id的binder,保证了数据的安全性。
在这里插入图片描述
所以android系统才选择了binder作为IPC进程间的通信方式。

2、通信模型

在这里插入图片描述
根据上面的模型,分为用户空间和内核空间:
内核空间就是binder驱动,由系统去实现。
用户空间中ServiceManager实际就是一个统计作用,内部存储各个binder和对应的映射关系,服务端的binder注册都是服务端将binder数据包通过binder驱动发送到ServiceManager中,驱动需要在数据包中添加内核中的节点和内核引用,ServiceManager就可以从数据包中取出binder名字和引用添加到一张表中。
客户端启动服务的时候,也是需要通过binder驱动到ServiceManager中查找对应名字的binder,然后获取到对应binder对象和内核空间的引用,然后就可以通过binder对象操作内核空间存储的数据。
在Java层面的代码执行过程就是,
1、服务端通过Stub构造函数中this.attachInterface(this,DESCRIPTOR)向binder的ServiceManager中注册匿名binder。
2、客户端启动服务端的Service,获取到服务端创建的binder对象,拥有了可以和服务端通信的能力,并且可以执行服务端提供的方法
3、客户端调用服务端提供的方法,通过Proxy的实现方法调用获取到的binder执行对应服务端的方法,达到跨进程通信,最后具体的操作都是在Service中的binder(抽象类Stub的实现变量,具体执行过程要在重写的方法内部)变量中执行

目前只能是拾人牙慧,进行简单的介绍一下,至于内部具体的很多问题,目前都不是很了解,尤其是深入的c语言的实现还需要继续去学习了。binder机制学习还是很消耗时间的,并且很枯燥。
感谢网上大佬的奉献,参考:
https://zhuanlan.zhihu.com/p/35519585
https://blog.youkuaiyun.com/universus/article/details/6211589

Android Binder 原理解析 目录 一. 前言 二. Binder 概述 三. Linux 下传统的进程间通信原理 3.1 基本概念介绍 3.2 Linux 下的传统 IPC 通信原理 四. Binder 跨进程通信原理 4.1 动态内核可加载模块 && 内存映射 4.2 Binder IPC 实现原理 五. Binder 通信模型 5.1 Client / Server / Service... 阅读详情

相关推荐

Binder跨进程通信原理(三):Binder IPC实现原理

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!资料⬅专栏获取。

2401_85729503的博客 1077

Android Binder 用法详解

创建文件// 接口标识符enum {// 接口定义public:// 声明接口元信息// 纯虚函数,需要子类实现// 服务端接口public:// onTransact 函数处理来自客户端的请求完整的 IPC 框架:支持跨进程方法调用类型安全:通过接口定义保证类型安全高性能:直接在 native 层实现,避免了 JNI 开销安全性:支持身份验证和访问控制。

琅嬛福地 2596

Android Framework学习六:Binder原理

Binder是Android系统中的一种进程间通信(IPC)机制,涵盖机制、应用和驱动三个层面。在机制层面,Binder提供标准化的通信方式,支持不同进程间的数据交换和方法调用。在应用层面,开发者可通过继承Binder类实现自定义的跨进程通信逻辑。在驱动层面,Binder作为虚拟物理设备驱动,负责管理内存映射、线程管理等底层操作。Binder通信过程中,数据通过Binder驱动在内核态和用户态之间传递,客户端通过copy_from_user将数据拷贝到内核空间,服务端通过mmap直接访问内核空间。每个APP

zmlovelx(帅得不敢出门 程序员群31843264) 1647

Android 服务绑定 binder 的简单使用

可以看到在onServiceConnected方法中有一个IBinder参数,这个参数就是 onBind 返回出来的Binder,强转成我们定义的ServiceTest.LocalBinder运行测试方法就可以ServiceTest的方法了。四,bindService,这个方法需要传入Intent,ServiceConnection,flags。三,在ServiceTest定义一个子类,子类继承 Binder,在子类中写一个测试方法。一,创建一个类继承 Service,并实现 onBind 接口。

Lizhi1992的博客 2290

理解Android系统Binder机制

一、Binder机制概述 在Android开发中,很多时候我们需要用到进程间通信,所谓进程间通信,实现进程间通信的机制有很多种,比如说socket、pipe等,Android中进程间通信的方式主要有三种: 1.标准Linux Kernel IPC 接口; 2.标准D-BUS接口; 3.Binder接口。 其中,Binder机制是使用最且最被认可的,因为Binder机制有以下优点: 1.相对于其它IPC机制,Binder机制更加简洁和快速; 2.消耗的内存相对更少; 3.传统的IPC机制可能会增加进程的开销,以及出现进程过载和安全漏洞,Binder机制则有效避免和解决了这些问题。 Binder机

Win10或Win8下ObjectARX2015 Wizard向导创建项目失败解决方法

[原创]objectARX 2015 Wizard安装向导在Win8/win10下无法创建项目的解决方法总结 by edata @2017-5-1 objectARX 2015 Wizard安装向导在Win8/win10下无法创建项目的解决方法 因为Win8/Win10对系统盘(默认c:)使用了高级权限管理,所以在此盘下操作文件的修改工作都需要管理员权限才行。 基于这个原因,导致非管理员安

edata的博客 7027

binder机制再学习

之前在探索艺术中学习过binder机制以及binder复用池,没有很深的理解,这次跟着大神们的blog再次小小的做一个总结,保证改会的都会。 Binder是Android中IPC机制,也是Android中使用最多的IPC方式,Android是基于Linux的,Linux也有进程间通信的方式比如 管道(pipe)、信号(Signal)、跟踪(Trace)、插口(Socket)、报文队列(messag...

RikkaTheWorld 396

【谷粒商城】分布式事务与下单

=购物车== 构建gulimall-cart,复制静态资源到nginx,修改网关 购物车分为离线购物车和登录购物车 离线购物车重启浏览器了也还有 1、购物车需求 特点:读多写少,放入数据库并不合适 登录状态:登录购物车 放入数据库 mongodb 放入redis(采用) 登录以后,将离线购物车里合并后清空离线购物车 未登录状态:离线购物车 放入localstorage浏览器的技术 cookie WebSQL 放入redis(采用) 浏览器重启后还在 2、购物车VO (1) 数据结构分析

努力充实,远方可期 1万+

Android BINDER详解

1.进程间通信的本质(2个进程) 用户空间的进程如果想相互通信,必须经过内核,因为不同进程的用户地址空间是独立的,但是共享同一个内核空间. 内核为了支持进程间通信,一般会有一个驱动,以字符设备的形式存在(也可以是其它形式,这个驱动的本质就是在不同的进程间传递数据).两个进程间通信一般以client/server的形式进行,大致流程如下: ser...

Android系统攻城狮 4393

vuecli3 实现 移动端和pc端 界面切换(两套代码)

适合场景 多页面多系统应用 所有系统都在同一目录下。配置多入口多出口。每个系统之间可以链接。每个系统内依然采用Vue单页应用开发。 产品需求:一套代码 兼容pc端和移动端 , 移动端和pc端的样式布局差别很大,需要使用多界面,并判断使用手机的时候跳转移动端代码,使用pc端跳转pc端代码。 项目目录 分为两部分代码,pc 和mobile 第一步:创建一个登陆页面的文件 在项目public文件夹下创建一个login.html,其实就是将index.html复制一份,将title改一下: <!DOCTYP

你怎么也喜欢嘴巴嘟嘟 5918

从轴承润滑到代码实现:手把手教你用Python FDM求解稳态雷诺方程

本文详细介绍了如何用Python FDM(有限差分法)求解稳态雷诺方程,从轴承润滑理论到代码实现的全过程。通过构建无量纲方程、有限差分格式和迭代求解算法,开发者可以快速实现专业级润滑分析,应用于涡轮发电机、汽车曲轴等场景。文章还提供了完整的Python代码示例和结果可视化方法,帮助工程师优化轴承设计。

weixin_28689507的博客 118

Android10.0 Binder通信原理(二)-Binder入门篇

Modify the binder to request 1M - 2 pages instead of 1M. The backing store in the kernel requires a guard page, so 1M allocations fragment memory very badly. Subtracting a couple of pages so that they fit in a power of two allows the kernel to make more e

IngresGe 的专栏 1万+

ROS 2 + Astra Pro深度相机实战:5分钟搞定远程可视化与距离检测(附避坑指南)

本文提供了一份详尽的ROS 2与Astra Pro深度相机集成实战指南。通过5分钟快速部署,实现远程可视化与实时目标距离检测。文章涵盖驱动安装、SSH+X11远程调试、核心测距节点编写,并附有详细的避坑指南,帮助开发者高效构建机器人视觉感知系统。

weixin_29232507的博客 277

Android Binder框架实现之Binder的设计思想

这是关于Android中Binder机制的一系列纯技术贴。花了一个多礼拜的时间,才终于将其整理完毕。行文于此,以做记录;也是将自己所得与大家分享。 和以往一样,介绍Binder时,先讲解框架,然后再从设计和细节等方面一一展开。若文章若错误或纰漏,请不吝指出。谢谢! 注意:本文是基于Android 4.4.2版本进行介绍的!

IT先森 1万+

华为OD机试 - 不含101的数(Python/JS/C/C++ 双机位C卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。小明在学习二进制时,发现了一类不含101的数,也就是:现在给定一个正整数区间,请问这个区间内包含了多少个不含101的数?输入的唯一一行包含两个正整数。输出的唯一一行包含一个整数,表示在区间内一共有几个不含101的数。8 1668 → “1000”

学Java,找哪吒 1249

AI智能体丨使用Coze一键生成爆款书单视频,3个月内获赞131.1w!(附保姆级教程)

这篇教程详细介绍了如何使用扣子(Coze)平台的AI智能工作流批量制作爆款书单视频。通过自动化流程,只需1-2分钟即可生成45-50秒的书单视频,效率提升近百倍。工作流包含文案生成、音频合成、图片素材获取、视频剪辑等全流程,支持随机生成8本书单、自动提取金句、智能配音等功能。教程提供了完整的操作步骤,包括剪映草稿配置、特效添加等细节,并附体验链接和示例效果。最终生成的视频包含书单展示、金句字幕、背景音乐等元素,适合书单号运营者快速批量产出内容。

李同学Lino的博客 2353

Android10.0 Binder通信原理(十一)-Binder总结

摘要:本节主要来讲解Android10.0 Binder的通信原理总结 阅读本文大约需要花费17分钟。 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计,欢迎关注我,谢谢! [Android取经之路] 的源码都基于Android-Q(10.0) 进行分析 [Android取经之路] 系列文章: 《系统启动篇》 Android系统架...

IngresGe 的专栏 8384

图文详解Trae配置Java开发环境

本文介绍了Trae开发工具的安装配置流程:首先从官网下载安装Trae,然后安装Java开发所需的Extension Pack for Java和Spring Boot Extension Pack插件。关键步骤包括修改settings.json配置文件,需指定JDK路径、Maven可执行文件路径和用户设置文件路径。所有操作均配有图示说明,并强调要替换为实际电脑路径。

谷哥的小弟 5987

Android Binder机制(一) Binder的设计和框架

Android Binder机制(一) Binder的设计和框架 首页博客链接关于我留言板 这是关于Android中Binder机制的一系列纯技术贴。花了一个多礼拜的时间,才终于将其整理完毕。行文于此,以做记录;也是将自己所得与大家分享。 和以往一样,介绍Binder时,先讲解框架,然后再从设计和细节等方面一一展开。若文章若错误或纰漏,请不吝指出。谢谢! 注意:本文是基于And

CCJHDOPC的专栏: 4231

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Android Binder的原理与使用

Android Binder的原理与使用

QG 2163

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android Binder 设计分析

Android Binder 设计分析 文章目录Android Binder 设计分析前言Binder 的优势简介Linux IPCIPC 对比Binder 特点总结Binder 通信模型Binder 驱动ServiceManager 和 ServerClientBinderBinder 协议ioctlBINDER_WRITE_READ 写入BINDER_WRITE_READ 读取binder_transaction_data 结构Binder 层次概述Binder 应用层Binder Server 端Bi

l0neman 的博客 982

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android 12 S Binder原理之BpBinder,BnBinder以及IInterface介绍

Binder机制是Android系统提供的跨进程通讯机制。Client进程希望可以与Server进程沟通,但由于是跨进程,所以需要借助Binder驱动进程通信。Binder由以下模块组成:* Binder驱动* Binder Server端 - Server进程* Binder Client端 - Client进程* ServiceManager - 管理者。

weixin_41028555的博客 2802

Android Binder通信原理(一):简介

在创建时分配一个page大小的内存,缓存区大小比较有限;考虑 PIPE_BUF 和原子操作;信息复制两次,额外的CPU消耗;不合适频繁或信息量大的通信;无须复制,共享缓冲区直接付附加到进程虚拟地址空间,速度快;但进程间的同步问题操作系统无法实现,必须各进程利用同步工具解决;作为更通用的接口,传输效率低,主要用于不通机器或跨网络的通信;常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段;

私房菜 2275

深入Android系统(三)Binder-3-原理

Binder的实现原理 涉及到原理源码肯定是少不了的,9.0 binder 相关的源码分为三部分: Java:frameworks/base/core/java/android/os/Binder.java native:frameworks/native/libs/binder/ driver:common/drivers/android/binder.c 还有一点需要明确的是: 用户进程:针对内核空间或者binder驱动来说的,这里指的是向binder驱动发送消息的进程 客户进程:针对binder

apigfly的博客 825

Android Binder原理解析

系统就会为我们把对应的远程服务端唤醒,看源码知道是通过ServiceManager 去远程服务用ClassLoader反射的方式启动需要启动的service。这里把我们传过来的对象进行解析,并回调了Stub的抽象方法addBook,这个抽象方法就是我们再Service中重写的那个方法。//将一个IBinder对象转换成一个com.love.candy.aidl,这里就是我们平常用到的那个方法了。//这里会通过Binder的onTransact方法回调到我们Stub中。//这里的值和Proxy中的值对应。

2501_90471794的博客 1372
上一篇: android binder入门(二)——手动实现
下一篇: Android 性能优化(二)—— 通过工具检测内存分析情况
明天的增加
博客等级 码龄11年 22粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值