Android中的Binder

news2024/12/27 0:51:57

binder是Android平台的一种跨进程通信(IPC)机制,从应用层角度来说,binder是客户端和服务端进行通信的媒介。

ipc原理

ipc通信指的是两个进程之间交换数据,如图中的client进程和server进程。

Android为每个进程提供了虚拟内存空间,而每个Android进程只能运行在自己进程所拥有的虚拟内存空间。

内存空间又分为用户空间和内核空间,前者的数据不能进程间共享,但后者可以。图中的Client进程和Server进程就是利用了进程间可以共享各自内核空间的数据,来完成底层通信的工作。

Android的C/S通信机制

C/S通信指的就是Client和Server两个进程的通信,但实际通信时除了包含这两个进程,还有一个Service Manager,它用于管理各种服务。

这些服务通常是Android系统的核心功能模块,例如传感器管理、电源管理、WIFI管理、闹钟服务等等,与Android四大组件中的服务不同。

当一个Server(服务端)想要提供一种服务,首先需要在Service Manager注册该服务;

而当Client(客户端)想要使用Server中的服务时,不能直接访问,而是要从Service Manager获取该服务,才能使用Server所提供的服务,来与Server进行通信。

Binder通信模型

在引入binder机制后,客户端、服务端和Service Manager之间不能通过api直接互相访问,而是与内核空间的binder驱动通过ioctl方式来完成进程间的数据交换。

关键概念

  • Binder实体对象:Binder服务的提供者,类型是BBinder,位于服务端
  • Binder引用对象:Binder实体对象在客户端进程的代表,类型是BpBinder,位于客户端
  • IBinder对象:Binder实体对象和引用对象的统称,也是他们的父类
  • Binder代理对象:又称接口对象,为客户端的上层应用提供接口服务,类型是IInterface

Binder引用对象和代理对象都是服务端进程中的,把它们分离的好处是一个代理对象可以有多个引用对象,方便上层应用使用。

通信过程

注册服务

  1. server进程向binder驱动申请创建服务的binder实体 
  2. binder驱动为这个服务创建位于内核的binder实体和binder引用
  3. 创建完成后,服务端通过binder驱动将binder引用发送给service manager
  4. service manager收到数据后,取出被创建服务的名字和引用,填入一张查找表

通过以上步骤,server进程通过binder驱动完成了在service manager的服务注册。

在注册服务的过程中,server进程是客户端,而service manager是服务端。

获取服务

 

  1. Client进程利用handle值为0的引用找到service manager
  2. Client进程向service manager发送xxxservice的访问申请
  3. service manager从请求表中获取xxxservice的名字,在查找表中找到对应的条目,取出对应的binder引用
  4. service manager把xxxservice的binder引用传给Client进程

使用服务

在使用服务时,Client和Server进程都是发送方和接收方。 

这是因为Client在发送服务请求时,Server是接收方;当Server返回数据给Client时,Client变成了接收方。

不论发送方是谁,都会通过自身的Binder实体,把数据发送给接收方的Binder引用。binder驱动回处理发送请求,利用内核空间进程共享机制如下:

  1. 把发送方的数据存入写缓存(binder_write_read.write_buffer)(对于接收方这是读缓存)
  2. 接收方一直处于阻塞状态,当写缓存有数据,会读取数据执行命令操作
  3. 接收方执行操作后,会把结果返回,同样放在写缓存区(对于发送方这是读缓存)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1991615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中值定理适用题型

探讨f 和 f’用 拉格朗日中值定理探讨f与f的高阶导数泰格公式探讨 f, g 和 f’, g’柯西中值定理探讨 f’0罗尔定理、费马定理f0零点定理 延伸: 拉格朗日中值定理的重要作用之一:用 f’ 的大小来限定 f 的变化幅度大小

快团团供货团长帮卖团长如何反向核销订单?

一、功能说明 当已核销的订单需要处理退款时,可以先操作反向核销(取消核销),再处理退款。 二、具体操作步骤 在商品核销中找到出想要“反向核销”的订单,在本次核销中点“-”号,再点击批量核销即可。 注意&…

【每日刷题】Day96

【每日刷题】Day96 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. LCP 44. 开幕式焰火 - 力扣(LeetCode) 2. 1022. 从根到叶的二进制数之和 - …

如何分析KDJ指标?九方智投学习机来帮忙

(九方智投属于九方智投控股有限公司(9636.HK)旗下品牌)      投资中,投资者需要参考的内容有很多,例如KDJ指标,KDJ指标又叫随机指标,是一种相当新颖、实用的技术分析指标&#x…

RJ TextEd 配置简易C/C++ 编译运行环境

前提条件 1.Mingw GCC已经按照且配置环境变量 2.RJ TextEd已安装 步骤 1.配置工具 2.新建 3.填写内容 以GCC为例 4.重复新建G/Run 为了同时支持C和C,有三个工具,gcc g run 5.设置快捷键 注意不能和已有的冲突 验证

ThreadLocal 详解(二)ThreadLocal的原理

前言:Threadlocal的原理涉及两个方面:Threadlocal实例和ThreadlocalMap;这是我画的草图 一.Threadlocal实例 每个Threadlocal对象实际上是一个容器,用于储存线程本地的变量副本。每个线程都可以拥有自己的Threadlocal实例&#xf…

快手如何改ip地址到另外城市

在现今的数字时代,社交媒体平台如快手已成为我们日常生活中不可或缺的一部分。无论是分享生活点滴、观看娱乐视频,还是进行商业推广,快手都为我们提供了广阔的空间。然而,在使用快手的过程中,一些用户可能会遇到需要更…

mapbox-gl 实现房间面生成墙(借助jsts)

文章目录 一、前言二、面生成墙方法示例 一、前言 当我们从室外放大到室内展示室内图层时,我们可能只有房间面的数据,这时要展示房间墙数据,就需要借助工具对房间面进行缓冲,但是数据变动时,我们还要再次进行一下缓冲…

【算法专题】哈希表

哈希表是什么?有什么用?什么时候使用?怎么用? 哈希表是存储数据对的容器;作用在于快速查找某个元素;当我们需要频繁地查找元素时,会考虑使用哈希表;在算法题中,我们通常使…

基于el-table的表格点选和框选功能

开篇 本篇文章旨在实现一个基于el-table的表格点选和框选功能,除此之外,还支持多种模式的切换、自定义勾选日期等。且,该表格后续可能还会持续优化! 功能介绍 表格点选和框选功能(没有点击ctrl键的情况下)…

AI安全新纪元:智能体驱动的网络安全新范式

近日,ISC.AI 2024第十二届互联网安全大会在北京盛大开幕。本次大会以"打造安全大模型,引领安全行业革命"为主题,旨在呼吁行业以大模型重塑安全体系,以保障数字经济的稳健发展。 在企业安全运营与策略实践论坛上&#x…

人工智能时代,数字化工厂如何改革?提升竞争力?

在人工智能时代,数字化工厂通过数据驱动的决策、智能制造、柔性生产、物联网整合以及人机协作,实现生产效率和产品质量的全面提升,并不断创新以保持竞争力。 --题记 在人工智能时代,数字化工厂的改革…

usb摄像头 按钮 静止按钮

usb摄像头 按钮 静止按钮 来分析一个UVC的摄像头的枚举信息 UVC学习:UVC中断端点介绍 https://www.eet-china.com/mp/a269529.html 输入命令lsusb -d 0c45:62f1 -v https://www.miaokee.com/705548.html >Video Class-Specific VS Video Input Header Descrip…

如何恢复未保存/删除的 WPS 文档文件

“如何恢复 WPS 文件?文件已损坏,似乎我之前没有保存过,软件退出,导致文件丢失。有什么方法可以恢复未保存的 WPS 文档吗?” WPS 办公套件是金山软件开发的一款很棒的套件。说实话,它更适合个人和办公室工…

GEE数据——全球固定宽带和移动(蜂窝)网络性能(网速)(2019-2024)

全球固定宽带和移动(蜂窝)网络性能 简介 全球固定宽带和移动(蜂窝)网络性能,分配给缩放级别 16 的网络 mercator 瓷砖(赤道处约 610.8 米乘 610.8 米)。 数据以 Shapefile 格式和 Apache Par…

在那曲,一场别开生面的盛会即将上演

当夏日的暖阳轻抚着那曲的广袤草原,一场展现高原之魂的盛会悄然临近。2024年8月8日,那曲市将举办一场独特的选美比赛——“最美牦牛”评选比赛,邀请各界人士、朋友共襄盛举。 牦牛,被誉为“高原之舟”,它们在这片古老的…

【nginx】解决k8s中部署nginx转发不会自动更新域名解析启动失败的问题

文章目录 1. 问题2.解决办法3.扩展说明3.1 DNS解析阶段划分3.2 问题说明3.2.1 先看/etc/resolv.conf说明3.2.2 针对第一个问题3.2.3 针对第二个问题 【后端】NginxluaOpenResty高性能实践 参考: https://blog.csdn.net/u010837612/article/details/123275026 1. 问…

【Java安全开发全流程解读】Ting-Write-Nuclei V1.0发布 【万户OA-SQL注入1Day-POC】

加微信即可加入WingBy交流群 不存在娱乐化 前言 nuclei-poc一键生成工具市面上很多也很全,比如burp插件生成POC projectdiscovery/nuclei-burp-plugin: Nuclei plugin for BurpSuite (github.com) GUI nuclei-plus/README_zh.md at main Yong-An-Dang/nuclei-p…

七夕情人节送什么礼物?看完这篇你就知道了

在这个充满爱意的时刻,送上一份精心挑选的礼物,不仅能表达你的爱意,更能加深彼此之间的情感联系。然而,选择一份合适的情人节礼物并非易事,因为每个人都有其独特的需求和喜好。如果你还在为情人节送什么礼物而纠结&…

1、.Net UI框架:Xamarin Forms - .Net宣传系列文章

Xamarin.Forms是一个跨平台移动应用开发框架,它允许开发者使用C#和.NET进行一次编码,然后在iOS、Android、macOS和Windows等多个平台上运行。Xamarin.Forms是Xamarin的一部分,而Xamarin是微软的.NET跨平台开发工具集,它提供了一套…