Android-Binder机制

article/2025/10/29 0:44:47

Binder机制是什么:

Binder机制是​ Android系统中进程间通讯(IPC)的一种方式,Android中ContentProvider、Intent、aidl都是基于Binder。

为什么要用Binder机制:

在提及Binder之前,我们先看看我们平时开发的app的状况。每个app就像孤岛一样,生活在系统分配给自己的虚拟机和内存空间,好处是安全,各个app不会互相影响到对方,IE一个网页的崩溃却会导致整个IE应用程序死亡(举个小栗子,IE不属于跨进程)。在这种情况下,必须有一种机制,提供安全高效的通信的功能,Binder就为此而生。所以,Binder是Android系统的一种IPC(进程间通信)方式。ActivityManagerService、WinderManagerService等系统服务的背后都是Binder。

Binder机制的好处:

进程通信大概就两个方面因素,一者性能方面,传输效率问题,传统的管道队列模式采用内存缓冲区的方式,数据先从发送方缓存区拷贝到内核开辟的缓存区中,然后再从内核缓存区拷贝到接收方缓存区,至少有两次拷贝过程,而socket都知道传输效率低,开销大,用于跨网络进程交互比较多,共享内存虽然无需拷贝,但是不安全。
总结一下就是:
Binder机制优点:
1、只需要进行一次数据拷贝,性能上仅次于共享内存
2、基于C/S架构,职责明确,架构清晰,稳定性较好
3、为每个App分配UID,UID是鉴别进程身份的标志,安全性较好

二者这是安全问题,Android作为一个开放式,拥有众多开发者的的平台,应用程序的来源广泛,确保终端安全是非常重要的,传统的IPC通信方式没有任何措施,基本依靠上层协议,其一无法确认对方可靠的身份,Android为每个安装好的应用程序分配了自己的UID,故进程的UID是鉴别进程身份的重要标志,传统的IPC要发送类似的UID也只能放在数据包里,但也容易被拦截,恶意进攻,socket则需要暴露自己的ip和端口,知道这些恶意程序则可以进行任意接入。
综上所述,Android需要一种高效率,安全性高的进程通信方式,也就是Binder,Binder只需要一次拷贝,性能仅次于共享内存,而且采用的传统的C/S结构,稳定性也是没得说,发送添加UID/PID,安全性高。

Binder机制的实现:

1、Binder机制的架构
通信采用C/S架构,包含Client、 Server、 ServiceManager 以及 Binder 驱动
在 framework 层进行了封装,通过 JNI 技术调用 Native(C/C++)层的 Binder 架构
在 Native 层以 ioctl 的方式与 Binder 驱动通讯
在这里插入图片描述
2、Binder机制的实现
android中提供了Binder实体类,Binder 实体是 Server进程 在 Binder 驱动中的存在形式。
该对象保存 Server 和 ServiceManager 的信息(保存在内核空间中),Binder 驱动通过 内核空间的Binder 实体 找到用户空间的Server对象,注册服务后,Binder驱动持有 Server进程创建的Binder实体。
流程总结:客户端通过bindService,通过Binder驱动查询ServiceManager是否已经注册该服务,
如果没有注册,Service进程会想Binder驱动发起服务注册请求,一旦注册,调用该服务的onBind返回一个Binder对象到Binder驱动,已经注册则意味着Binder驱动内包含这个Binder对象,Binder驱动返回一个BinderProxy对象,并通过回调,传递给客户端,客户端通过这个BinderProxy(在java层仍然是Binder对象)操作Binder驱动内的Binder对象(transact方法),Binder驱动含有很多的Binder对象,它们是通过InterfaceToken区分不同服务的。
在这里插入图片描述

Binder通信的四个角色

Client进程:使用服务的进程。

Server进程:提供服务的进程。

ServiceManager进程:ServiceManager的作用是将字符形式的Binder名字转化成Client中对该Binder的引用,使得Client能够通过Binder名字获得对Server中Binder实体的引用。

Binder驱动:驱动负责进程之间Binder通信的建立,Binder在进程之间的传递,Binder引用计数管理,数据包在进程之间的传递和交互等一系列底层支持。

Binder运行机制

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

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

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

使用服务: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通信。

关注公众号,获取更多开发必备知识
在这里插入图片描述


http://chatgpt.dhexx.cn/article/xQmNdkaj.shtml

相关文章

深入理解Binder机制

Binder框架 Binder是什么 1.Binder是一种进程间通信机制; 2.Binder是一个虚拟物理设备驱动; 3.Binder是一个能发起通信的Java类; Binder与传统IPC对比 Binder共享内存Socket性能内存拷贝一次无需拷贝内存拷贝两次特点基于C/S架构 易用性高…

Android Binder机制原理

一 Android与Linux通信机制的比较 虽然Android继承使用Linux的内核,但Linux与Android的通信机制不同。 在Linux中使用的IPC通信机制如下: 1.管道(Pipe):点对点通信,因为采用存储转发方式,需要拷…

Android——Binder机制

1.简介 Binder是什么? 机制:Binder是一种进程间通信的机制 驱动:Binder是一个虚拟物理设备驱动 应用层:Binder是一个能发起进程间通信的JAVA类 Binder就是Android中的血管,在Android中我们使用Activity,Service等组…

Android Binder机制之一(简介)

目录 前言 一、Android 进程间通信方式 二、Binder架构图 三、Binder涉及角色 3.1 Binder驱动 3.2 Binder实体 3.3 Binder引用 3.4 远程服务 3.5 ServiceManager守护进程 四、涉及源码 前言 这是本人第N次看Binder 相关知识了,其实每次看都有新的收获&…

binder机制原理android,Binder机制1---Binder原理介绍

1.Binder通信机制介绍 这篇文章会先对比Binder机制与Linux的通信机制的差别,了解为什么Android会另起炉灶,采用Binder。接着,会根据 Binder的机制,去理解什么是Service Manager,在C/S模型中扮演什么角色。最后&#x…

理解Binder机制

前言 ​ Android中Binder机制的重要性不言而喻,从IPC角度来看, Binder是一种跨进程通信方式,Binder也可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder;从Android framework角度来说,Binder是Serv…

Android--Binder机制

Android--Binder机制 1.简介 Binder是什么? 机制:Binder是一种进程间通信的机制 驱动:Binder是一个虚拟物理设备驱动 应用层:Binder是一个能发起进程间通信的JAVA类 Binder就是Android中的血管,在Android中我们使用…

Binder 机制

Binder 是 Android 系统进程间通信(IPC:Internet Process Connection)方式之一。Linux 已经拥有的 IPC 手段包括: 管道(Pipe)、信号(Signal)、跟踪(Trace)、插…

Android Binder机制

Android Binder机制 什么是BinderBinder一般的IPC原理动态内核可加载模块内存映射运行机制四大角色注册服务使用服务 对象的传递Binder通信 什么是Binder 要理解binder,先要知道IPC,Inter-process communication ,也就是进程中相互通信,Bind…

Binder机制

直观来讲,Binder是Android中的一个类,它实现了IBinder接口。从IPC角度来看,Binder是Android中一种跨进程通信方式,Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder,该通信方式在Linux中没…

Binder机制原理

前言 本篇文章记录本人对Binder的学习,因为本人能力有限,若有错误,还请批评指正。 binder的使用文章推荐 1.Binder是什么? 可以理解是为Android的血管。是一种进程间通信的机制。比如Activity,Service需要和AMS通信…

Binder机制(非常好理解)

Binder是一种进程间通信机制,用来实现不同进程之间的通信。 Binder机制主要由四大块组成,分别是客户空间的client、server,serverManager,还有内核的Binder驱动。 下面我先看下图,利于理解Binder内部工作机制&#x…

Android进程间通信之一:Binder机制学习

Binder机制学习 Binder驱动Binder核心APILinux 使用两级保护机制:0 级供系统内核使用,3 级供用户程序使用。 Linux 下的传统 IPC 通信原理Linux 下的传统 IPC 通信原理Binder通信过程ServiceManager进程启动MMAP Binder驱动 binder驱动在以misc设备进行注…

Android跨进程通信:图文详解 Binder机制 原理

前言 如果你接触过 跨进程通信 (IPC),那么你对Binder一定不陌生虽然 网上有很多介绍 Binder的文章,可是存在一些问题:浅显的讨论Binder机制 或 一味讲解 Binder源码、逻辑不清楚,最终导致的是读者们还是无…

操作系统实验五--存储管理

文章目录 操作系统实验五--存储管理一、实验目的二、实验内容三、设计原理及相关算法四、结果分析五、源代码 操作系统实验五–存储管理 一、实验目的 1、了解虚拟存储技术的特点,掌握请求页式存储管理的主要页面置换算法原理。 2、掌握请求页式存储管理中页面置…

操作系统实验—存储管理

操作系统实验—存储管理 所有实验源码: gitee:https://gitee.com/infiniteStars/os-project github:https://github.com/helloworldzsq/OSproject 1.实验内容 设计一个虚拟存储区和内存工作区,并使用下述方法计算访问命中率。 ①…

操作系统实验——磁盘调度算法

文章目录 前言一、实验目的二、实验内容和要求三、实验程序四、运行结果运行结果截图 五、思考和分析程序实现(思路):分析几种算法: 附 前言 提示:本次实验在Linux(Ubuntu)中运行,程序中读取的文件需放在与c文件同一个文件夹中&a…

北航操作系统实验入门

有北航操作系统实验平台账号的部分读者反映不会操作。为了让读者尽快了解实验平台的操作,下面介绍lab0的实验步骤,希望读者能尽快掌握实验平台的使用方法。 1. 用学生账号登录 2. 点击【操作系统实验】进入实验界面 3. lab0实验环境介绍,仔细…

操作系统实验三进程间通信

文末也可直接获取实验文档 实验三 进程间通信 目录 1实验目的2 实验内容3实验详细操作步骤及程序清单:4相关问题及思考5总结6背景知识 1实验目的 1、了解linux系统中进程通信的基本原理。 2、分析进程竞争资源现象,学习解决进程互斥的方法。 2 实验内…

操作系统实验——进程控制

操作系统实验——进程控制 预习内容: 1.进程的概念 ⑴程序的并发执行 ⑵进程的定义 2.进程的描述 ⑴进程控制块 ⑵进程上下文 ⑶进程上下文切换 ⑷进程空间与大小 3. 进程状态及其转换 ⑴进程状态 ⑵进程状态转换 4.进程控制 ⑴进程创建与撤销 ⑵进程的阻塞与唤醒…