Android进程通信Binder(2)-Android系统服务与Binder

Android——Binder机制 1.简介 Android系统中,涉及到多进程间的通信底层都是依赖于Binder IPC机制。 例如当进程A中的Activity要向进程B中的Service通信,这便需要依赖于Binder IPC。不仅于 此,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信,Interprocess Communication)方案。 也存在部分其他的IPC方式,如管道、SystemV、Socket等 为什么使用Binder: 性能方面: Binder相对于传统的Socket方式,更加高效 阅读详情
当我们在编写咱们的应用程序的时候,有时候需要调用系统服务,做一些我们需要做的工作,比如调用输入法的服务,位置服务,Wifi服务等。

首先大家要知道,这些服务不是通过startService()的方式启动的,是操作系统在开机的时候或者在需要的时候通过另一种方式启动的,后面的博客中国会讲到,也可以自行在网上查一下。
   
 我们调用系统服务的时候试通过getSystemService(String serviceName)的方式进行获取的,这个方法的具体实现在ContextImpl中实现的。 


这个方法是通用的访问接口,根据不同的服务名称返回不同的服务,这些服务都由serviceManager进行管理。
为什么使用这种方式?好处在于便于对服务统一管理,也便于应用开发者编写应用程序。下面主要讲一下ServiceManager,Service和Binder之间的关系。
    ServiceManager运行在一个独立的进程中,其实ServiceManager本身也是一个Service,Framework提供了一个系统函数可以获取该Service对应的Binder引用。
    从getSystemService()这个方法找起,如下


以获得AlarmManager为例
接着执行getAlarmManager();


第1020行 返回的Alarm服务的Binder引用
第1021行 返回一个AlarmManager的实现
第1022行 new一个AlarmManager管理类,就是用来管理这个Alarm服务

从1020行,进入到ServiceManger这个类里面,然后进去getService(ALARM_SERVICE)方法,代码如下

这个方法作用就是返回指定名字service的引用。
第51行 先从sCache中找一下是否存在这个service,如果存在就把这个IBinder返回给调用者(52、53行)。
    sCache是一个存储Binder的map集合,如下代码:


如果是第一取Alarm 服务的时候是不存在的,那么就会调用第55行代码。先进入getIServiceManager()这个方法


可以看出,这个方法就是获得ServiceManager的一个静态方法,38行已经给了注释。
第39行 ServiceManagerNative.asInterface(BinderInternal.getContextObject());就是用于获得ServiceManager的。
    BinderInternal.getContextObject()用于获得ServiceManager服务的远程服务的Binder引用,继续进入到这个函数


这个是个native的函数,返回值就是一个远程IBinder对象引用,注释的大体意思是这个Binder是整个应用程序全家的系统对象,也就是说一个应用程序对应一个,他的一个实现就是ServiceManager,可以通过它获取其他的服务。

咱们回到SErviceManagerNative.asInterface()这个里面


大家看到了吗,是不是和上次讲的aidl生成的java文件很像。


这样就获得了IServiceManager,也是远程服务对象的引用。把IServiceManager对象赋值给了ServiceManger里面的
sServiceManager静态变量,然后再继续看下getService()方法,得到sServiceManager之后就会调用sServiceManager 的getService方法。

下面的代码:


如果在第一获取这个Alarm服务的时候,是没有的,没有就从系统服务里找到(如何被添加进去以后再讲)。

从上面看出,ServiceManager仅仅是远程IServiceManager服务的代理,把远程服务Binder的引用做为其一个静态变量。大家可以想象这样的好处。

到这里的时候就获得Alarm服务的远程IBinder的引用。回到ContextImpl这个类


从1021行代码开始,是为远程的IAlarmManager创建了一个远程服务Binder引用的代理AlarmManager.

对于android系统提供的Manager的理解

    ServiceManager管理的所有Service都是以相应的Manager返回给客户端(调用者)的,在android的Framework中,
Manager的角色类似于经纪人,Manager所管理的对象是相应的服务,每个具体服务都会提供多个服务接口,Manager就是管理这个服务提供的接口 的。客户端不能直接通过Binder的引用访问具体的服务,Manager类是对客户端可见的,而远程的服务客户端是不可见的。并且每个Manager类中都有一个远程服务的Binder的引用,一般是通过构造函数传过去的,如AlarmManager:


也就是说,客户端通过Manager这个经纪人调用远程服务的引用,而间接的访问远程服务。

调用图


这种设计方式的好处是,屏蔽了对远程访问的直接访问,应用程序去调用服务的时候会更加灵活,对于系统设计来说,对于api的设计也可控的,只让客户端访问允许访问的功能(电话拦截,挂断电话就可以屏蔽掉,如果您理解了这两篇帖子的话,对于这样的功能实现也就小kiss了)。

ok,先写到这里,如有错误,敬请指正。

Android基础之Binder分析(2) 最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2019-2021BAT 面试真题解析,我把大厂面试中常被问到的技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。Android 基础知识点Java 基础知识点Android 源码相关分析常见的一些原理性问题。 阅读详情

相关推荐

图解Android中的binder机制

一个进程是不能直接直接操作另一个进程的,比如说读取另一个进程的数据,或者往另一个进程的内存空间写数据,进程之间的通信要通过内核进程才可以,因此这里就要使用到进程通信工具Binder了如下图:Binder driver通过/dev/binder /dev/binder 提供了 open, release release, poll poll, mmap mmap, flush flush, and ioctl等操作的接口api。这样进程A和进程B就可以通过内核进程进行通信了。

2401_84123005的博客 1098

Android基础之Binder分析

我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了5、6年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。不断奔跑,你就知道学习的意义所在!

2401_84537603的博客 1322

Android AIDL与Binder进程通信详解

进程间通信(IPC)是Android开发的核心技术之一,Binder机制作为Android特有的IPC方案,相比传统Linux IPC具有更高性能和安全性。AIDL(Android接口定义语言)基于Binder实现,通过定义接口契约简化了跨进程调用。在Android沙箱环境下,AIDL支持基本数据类型、Parcelable对象和回调接口的传输,广泛应用于前台与后台服务交互、多应用数据共享等场景。理解AIDL的参数方向标记(in/out/inout)、异步oneway调用等高级特性,能有效优化IPC性能。本文

congsikuai0611的博客 400

Binder学习总结

Binder学习总结。 一、Binder 与AIDL的关系 二、大致流程: 三、Binder优点: 四、实现原理: 五、Binder相关类介绍:

风和先行的专栏 1121

Android系统架构之Binder机制

Binder机制是Android系统IPC的核心,它为不同进程之间的通信提供了高效、稳定、安全的解决方案。通过理解Binder机制的原理和实现,开发者可以更好地利用Android系统的IPC能力。

bai915290475的博客 773

Android Binder原理(三)系统服务的注册过程

关联系列 Android AOSP基础系列 Android系统启动系列 应用进程启动系列 Android深入四大组件系列 Android深入理解Context系列 Android深入理解JNI系列 Android解析WindowManager Android解析WMS系列 Android解析AMS系列 Android包管理机制系列 Android输入系统系列 本文首发于微信公众号「后厂技术官」 ...

Android进阶三部曲 - 刘望舒 2435

Android Binder服务进程

在Android系统中,每一个应用程序都是由一些Activity和Service组成的,一般Service运行在独立的进程中,而Activity有可能运行在同一个进程中,也有可能运行在不同的进程中。那么,不在同一个进程的Activity或者Service是如何通信的呢?这就是本文中要介绍的Binder进程间通信机制了。         我们知道,Android系统是基于Linux内核的,而L

LinuxEngineer的专栏 1439

Android Framework 面试集合——Binder篇

内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据 为了保证系统的安全,用户空间和内核空间是天然隔离的 每个进程有自己的虚拟内存空间,为了安全,每个进程只能操作自己的虚拟内存空间,只有操作系统才有权限操作物理内存空间。

qq_52703909的博客 1030

Android系统篇之----Binder机制和远程服务调用

编码美丽 2016-09-10 09:09 一、前景概要 最近要实现Android中免注册Activity就可以运行的问题,那么结果是搞定了,就是可以不用在AndroidManifest.xml中声明这个Activity即可运行,主要是通过骗取系统,偷龙转凤技术的,这个知识点后面会详细讲解的,因为在研究了这个问题过程中遇到了很多知识点,当然最重要也是最根本的就是Android中的Bin

u011277123的博客 4202

智能驾驶感知模块的测试评估方法(上)

对于智能驾驶系统而言,感知模块是开发难度最大、投入资源最多的核心部分。在智能驾驶开发团队内部,感知模块需要独立进行评测才能及早发现潜在缺陷或判断性能是否有改进。随着近几年BEV、OCC、E2E等新技术方案被越来越多企业应用,感知的评测变得越来越艰难,效率也变得越来越低下。本文作者基于在智驾测试行业多年经验,试图总结感知评测的基本规律和效率提升方法,以供读者一些启发。

vincent_321的博客 2559

VS2022打包C#安装包(最新、最全)

VS2022打包C#安装包(最新、最全)

qq_37959253的博客 9899

Android 进程间通信

Android系统提供了一些通用服务,比如音乐打电话发短信,WIFI,定位,输入法,传感器等。应用程序与这些通用服务运行在不同的进程中,如果应用程序想要与这些通用服务交互就要涉及到进程间通信,Binder就是为了Android进程间通信而设计的。

Think different 429

ROSTEA软件下载及情感分析详细操作教程(附网盘链接)

原ROST虚拟团队出品的ROST系列文本内容挖掘分析平台,是辅助人文社会科学研究的免费计算平台。该软件可以实现文本预处理、分字、分词、词性识别、特殊名词抽取、词频统计、英文词频统计、情感计算、分类算法、聚类算法等一系列文本挖掘,是人文社科研究和论文写作的一把利器。该软件用户量超过一万人,遍布海内外100多所大学,包括剑桥大学、日本北海道大学、北京大学、清华大学、香港城市大学、澳门大学等众多高校。关于ROSTCM6的安装介绍可以参考之前的文章ROSTCM6软件下载及语义网络分析详细操作教程ROST EA。

m0_64336780的博客 1万+

图解Android中的Binder机制

前言 Binder做为Android中核心机制,对于理解Android系统是必不可少的,关于binder的文章也有很多,但是每次看总感觉看的不是很懂,到底什么才是binder机制?为什么要使用binder机制?binder机制又是怎样运行的呢?这些问题只是了解binder机制是不够的,需要从Android的整体系统出发来分析,在我找了很多资料后,真正的弄懂了binder机制,相信看完这篇文章大家也...

有图有真相 2万+

风光储并网对电力系统稳定性影响的仿真研究

本文研究了风光储并网对电力系统稳定性的影响,基于MATLAB/Simulink平台搭建了IEEE 9节点测试系统的风光储并网模型。研究对比了光储、风储和风光储三种并网配置在多种干扰下的稳定性表现。结果表明:光储系统对频率变化最敏感,风储系统具有更强的功率波动适应能力,而风光储联合系统通过互补效应展现出最佳综合稳定性。储能系统在所有配置中均显著改善了频率恢复性能,验证了其在新能源并网中的关键支撑作用。研究为高比例可再生能源电力系统的稳定运行提供了仿真依据和技术参考。

huanghm88的专栏 153

还在纠结二层交换机和三层交换机的区别?这篇文章帮你讲明白!

你好,这里是网络技术联盟站,我是瑞哥。公众号后台有小伙伴想要写一篇文章具体介绍一下二层交换机和三层交换机,此类的文章,之前写过几篇,今天瑞哥再写一篇,希望对大家有所帮助!

网络技术联盟站 4441

Android:安卓学习笔记之Binder 机制的简单理解和使用

Binder 机制 的简单理解和使用Binder 机制参考 Binder 机制 参考 1、图解Android中的Binder机制 2、Android Binder(也许是最容易理解的) 3、图文详解Binder跨进程通信原理 4、Android 接口定义语言 (AIDL) ...

JMW1407的博客 1万+

微信小程序 - 实现人脸识别对比+人脸相似度数据,用户从相册选择或拍照上传两张图片进行人脸对比得到人脸相似度及判断是否是同一个人,微信小程序检测人脸相似度(免费纯前端方案+调用第三方API接口方案)

微信小程序实现人脸识别对比,微信小程序人脸对比 人脸对比识别 人脸对比相似度,实现获取手机摄像头权限,调用相机拍照实现人脸识别相似度对比,小程序人脸相似度对比,快速识别两张照片的相似程度(用百分比)图片相似度对比在线测试,图片相似度对比,微信小程序人脸相似度对比分析,计算两张人脸的相似度,从而判断是否同一个人,并给出相似度评分。小程序如何实现人脸相似度比对,小程序纯前端怎么对比两张图片的相似度,计算两幅图像的相似度,图像相似度对比方法,调用百度AI的人脸识别,微信小程序中实现人脸识别认证,实现人脸检测、人脸

🏆 前端领域优质创作者 4862

Android进程通信Binder(1)-Binder进程通信的思想

在android中Binder用于完成进程间通信,Binder工作在Linux层,属于一个驱动,只是这个驱动不需要硬件,其操作的硬件基于某一小端内存。从线程的角度来讲,Binder驱动代码运行在内核态,客户端程序调用Binder是通过系统调用完成的。 Binder是一种架构,这种架构提供了服务端接口、Binder驱动、客户端接口三个模块。 服务端:一个服务端实际上就是一个Binde

com360的专栏 3216

基于CNN的三相故障识别算法及实现(Matlab)

通过预处理数据、构建CNN模型、训练与评估模型等步骤,我们可以准确快速地识别三相故障。现代电力系统中,三相故障是一种常见的故障情况,可以导致电网中断、设备损坏甚至火灾等严重后果。本文将介绍基于卷积神经网络(CNN)的三相故障识别算法,并提供Matlab源代码实现。首先,将原始信号分为训练集和测试集。然后,对输入信号进行归一化处理,确保数据在合适的范围内。CNN适用于处理二维数据,所以我们可以将输入信号看作是时间序列数据和特征(如电压、电流等)的二维矩阵。在开始之前,我们需要一个包含正常和故障样本的数据集。

学习使你进步。 384

从技术债红线到系统治理:透视 SAP Clean Core 中的 Level D

SAP推出的Clean Core分级体系将扩展风险划分为A到D四个等级,其中Level D代表最高风险类别,涉及直接修改标准代码、隐式增强、使用noAPI对象等不被推荐的做法。这些做法虽然短期见效快,但会带来升级冲突、数据完整性风险等长期问题。SAP强调治理重点不是完全消除经典ABAP,而是优先清理Level D对象,逐步向稳定接口迁移。典型案例显示,依赖内部细节的扩展往往在系统升级或云迁移时集中暴露出问题。企业应通过工具链持续监控Level D占比,将其纳入技术债管理范畴。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1063

如何应对Android面试官->进程通信,启动与获取SM服务

ServiceManager 讲解,轻松应对Android面试官连环炮,轻松应对注册获取的流程

IT_Android的博客 1339

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

IPC机制 Binder

引言 Binder是Android系统中最重要的特性之一。正如其名“粘合剂”,它是粘合系统间各个组件的桥梁,Android系统的开放式设计也很大程度上得益于这种跨进程的通信机制。 理解Binder对于理解整个Android系统有着非常重要的作用,Android系统的四大组件,AMS,PMS等系统服务无一不与Binder挂钩;如果对Binder不甚了解,那么就很难了解这些系统机制,从而仅仅浮游与表面,不懂Binder你都不好意思说自己会Android开发;要深入Android,Binder是必须迈出的一步。

hirezy 4833

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android中的binder机制详解

Android中的binder机制详解

QG 4628

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android: Binder: 彻底顿悟Android Binder

Android: Binder: 彻底顿悟Android Binder

C++ JAVA的专栏 1590

Android底层:通熟易懂的分析binder--2. binder进程通信协议及“记录链路”结构体

前言 binder的准备工作主要介绍了binder进程通信之前需要做的准备工作有哪些,既然binder准备工作做好了,那下一步就是通信了,在讲解通信之前,我希望先把通信的基础知识讲清楚,比如进程与driver层之间的通信协议是啥?binder_node,binder_ref,binder_thread,binder_proc这些东西到底都是啥?在通信过程中起啥作用?Binder,BinderProxy,BpBinder,BBinder又是啥?只有把这些基础知识了解清楚,对于后面的内容理解才能胸有成竹。 本篇

niurenwo的专栏 2301
上一篇: Android进程通信Binder(1)-Binder进程通信的思想
下一篇: Andriod中的Context理解与分析
com360
博客等级 码龄16年 225粉丝 137原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值