Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android-Binder机制

Android-Binder机制

作者头像
用户7557625
发布于 2020-07-15 02:55:52
发布于 2020-07-15 02:55:52
1.4K0
举报

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通信。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/01/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
写给 Android 应用工程师的 Binder 原理剖析
这篇文章我酝酿了很久,参考了很多资料,读了很多源码,却依旧不敢下笔。生怕自己理解上还有偏差,对大家造成误解,贻笑大方。又怕自己理解不够透彻,无法用清晰直白的文字准确的表达出 Binder 的设计精髓。直到今天提笔写作时还依旧战战兢兢。
张磊BARON
2018/04/13
2K0
写给 Android 应用工程师的 Binder 原理剖析
Binder机制 简单理解
Android系统中,涉及到多进程间的通信底层都是依赖于Binder IPC机制。例如当进程A中的Activity要向进程B中的Service通信,这便需要依赖于Binder IPC。不仅于此,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信)方案。
zhangjiqun
2024/12/16
2110
Binder机制 简单理解
Android进程间通信之一:Binder机制学习
主要是驱动设备的初始化(binder_init),打开 (binder_open),映射(binder_mmap),数据操作(binder_ioctl)。
北洋
2021/12/08
5780
Android进程间通信之一:Binder机制学习
写给Android开发的Binder指南
Linux 已经提供了管道、消息队列、共享内存和 Socket 等 IPC 机制。那为什么 Android 还要提供 Binder 来实现 IPC 呢?主要是基于性能、稳定性和安全性几方面的原因。
老马的编程之旅
2022/06/22
5580
写给Android开发的Binder指南
Android高频面试专题 - 进阶篇(三)Binder机制
Android作为移动端操作系统,传统的Linux进程间通信机制不满足于Android,所以开发了一套新的IPC机制,就是Binder机制。
Android扫地僧
2020/03/19
9970
Android高频面试专题 - 进阶篇(三)Binder机制
Android Binder跨进程通信
为了保证 安全性 & 独立性,一个进程 不能直接操作或者访问另一个进程,即Android的进程是相互独立、隔离的
Anymarvel
2018/10/22
9260
Android Binder跨进程通信
Android 进阶8:进程通信之 Binder 机制浅析
张拭心 shixinzhang
2018/01/05
2.2K0
Android 进阶8:进程通信之 Binder 机制浅析
Android跨进程通信:图文详解 Binder机制 原理
Binder 跨进程通信机制 模型 基于 Client - Server 模式
Carson.Ho
2019/02/22
3.4K0
再谈Android Binder跨进程通信原理
在谈Android的跨进程通信问题上时,总会问到Android的IPC机制,是指两个进程之间进行数据交换的过程。按操作系统的中的描述,线程是CPU调度最小的单元,同时线程是一种有限的系统资源,而进程是指一个执行单元,在PC和移动设备上指一个程序或者一个应用。
xiangzhihong
2022/11/30
5280
Android进程间通信 -- Binder学习记录
移动设备的操作系统阵营之一的Android,底层基于Linux内核,中间为Native&Runtime层和Framework层。我们知道Linux本身有着很成熟的IPC(进程间通信)机制,比如管道、消息队列、共享内存、socket、信号和信号量等。然而,Android却使用Binder来作为它的IPC的方案,这是为何呢?接下来,就把我之前学习Binder的心得写下来。
用户6414482
2022/08/28
6580
Android进程间通信 -- Binder学习记录
Android Binder实现浅析-Binder驱动
Android是如何实现跨进程通信的,大家熟悉的Binder是什么,怎么设计的,进程间的数据如何发送接收的。本文将以及解析,并对Binder驱动实现、Native层实现、Java层实现三块做一个总结分析。
233333
2020/02/18
9900
Android Binder实现浅析-Binder驱动
深入理解Binder
之前一直对 Binder 理解不够透彻,仅仅知道一些皮毛,所以最近抽空深入理解一下,并在这里做个小结。
俞其荣
2019/07/09
1.2K0
Binder纯理论分析
首先Binder是Android中的一种独有的跨进程通信方式,简称IPC。它是专门为Android平台设计的。
Rouse
2021/01/24
7940
Binder 机制「建议收藏」
Binder 是 Android 系统进程间通信(IPC:Internet Process Connection)方式之一。Linux 已经拥有的 IPC 手段包括: 管道(Pipe)、信号(Signal)、跟踪(Trace)、插口(Socket)、报文队列(Message)、共享内存(Share Memory)和信号量(Semaphore)等。本文详细分析 Binder 作为 Android 主要 IPC 方式的原理和优势。
全栈程序员站长
2022/07/23
1.4K0
Binder 机制「建议收藏」
Android跨进程通信IPC之6——Binder框架
为了让大家更好的理解Binder机制,我们先来看下Android的整体架构。因为这样大家就知道在Android架构中Binder出于什么地位。 用一下官网上的图片
隔壁老李头
2018/08/30
1.5K0
Android跨进程通信IPC之6——Binder框架
面试 | 再也不怕被问 Binder 机制了
原文链接:https://juejin.cn/post/7293175592162836514
GeeJoe
2023/10/24
1.6K1
面试 | 再也不怕被问 Binder 机制了
Android Binder面试详解
目前linux支持的IPC包括传统的管道、System V IPC、即消息队列/共享内存/信号量,以及socket中只有socket支持Client-Server的通信方式
用户2802329
2018/08/07
1.1K0
Android Binder面试详解
深入理解Android IPC机制之Binder机制
Binder是Android系统进程间通信(IPC)方式之一。Linux已经拥有的进程间通信IPC手段包括(Internet Process Connection): 管道(Pipe)、信号(Signal)和跟踪(Trace)、插口(Socket)、报文队列(Message)、共享内存(Share Memory)和信号量(Semaphore)。本文详细介绍Binder作为Android主要IPC方式的优势。 Binder机制概述: 基于Client-Server的通信方式广泛应用于从互联网和数据库访问到嵌
xiangzhihong
2018/02/05
1.1K0
深入理解Android IPC机制之Binder机制
Binder框架:进程通信的核心机制与实现原理
在操作系统中,进程间通信(IPC)是协调多任务执行的关键技术。由于进程隔离机制的存在,不同进程的内存和数据空间相互独立,直接访问被严格禁止。为突破这一限制,操作系统设计了共享内存、Socket等多种IPC方案,而在Android系统中,Binder机制凭借高效性与安全性成为核心通信框架。本文将深入解析Binder框架的技术原理,揭示其如何通过内核驱动与用户空间协作实现跨进程通信。
Yangsh888
2025/05/31
2420
Android Framework学习(九)之Binder概述
Android系统中,每个应用程序是由Android的Activity,Service,Broadcast,ContentProvider这四大组件的中一个或多个组合而成,这四大组件所涉及的多进程间的通信底层都是依赖于Binder IPC机制。不仅于此,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信)方案,当然也存在部分其他的IPC方式,比如Zygote通信便是采用socket。
老马的编程之旅
2022/06/22
4420
Android Framework学习(九)之Binder概述
相关推荐
写给 Android 应用工程师的 Binder 原理剖析
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档