Android - Binder机制 - 普通service注册

Android实现在ServiceManager中加入自定义服务的方法详解 本文实例讲述了Android实现在ServiceManager中加入自定义服务的方法。分享给大家供大家参考,具体如下: 当我们要使用android的系统服务时,一般都是使用Context.getSystemService方法。例如我们要获取AudioManager,我们可以: AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 获取的服务,其实是在ServiceManager中注册的Binder服务,然后进行封装后,提供给用户。 可以看ContextImpl.java中的实现: static 立即下载

以下几篇文章是较深入分析binder机制。

目录

1. Android - Binder机制 - ServiceManager

2. Android - Binder机制 - 普通service注册

3. Android - Binder机制 - 获得普通service

4. Android - Binder机制 - client和普通service交互

5. Android - Binder机制 - Binder框架总结

6. Android - Binder机制 - ProcessState和IPCThreadState

7. Android - Binder机制 - 驱动


Android - Binder机制 - 普通service注册

UML及说明


这个要比ServiceManager复杂多了,首先对每个类进行简单角色说明:

1. Main_mediaserver是一个进程,它是多媒体方面的总进程,这个进程共开启了MediaPlayerService等四个服务,我们这篇讲的就是如何注册一个服务;

2. Service_manager.c就是第一篇将的ServiceManager,它是另外一个进程,它要通过binder接收该进程的AddService请求,并进行相应处理(第一篇已经讲);

3. IInterface和IServiceManager定义了Main_mediaserver和ServiceManager之间的功能接口,它是一个抽象类;

4. BpServiceManager和BpInterface继承于IServiceManager,当然就是对功能接口的具体实现;

5. CameraService是照相机的服务,它继承于BinderService,它主要是调用BpServiceManager的addService()接口注册服务;

6. IBinder是定义Binder数据传输层的功能接口,它有一个接口transact,做过android的应该都有印象,它也是一个抽象类;

7. BpBinder是对IBinder的具体实现,它是用来进行数据传输的,BpRefBase中的mRemote就是指向的BpBinder,BpRefBase起了一个代理作用,但是BpBinder没有直接和binder打交道,而是通过调用下面的IPCThreadState实现的;

8. IPCThreadState才是和binder进行打交道的类,它才是真正的数据传输者;

9. ProcessState它主要打开binder设备供IPCThreadState使用和获得ServiceManager用来注册服务;

10. 在分析的时候还是先有一个整体把握,这个会在后面详解,BpRefBase以上是业务逻辑(要实现什么功能),BpRefBase以下是数据传输(通过binder如何将功能实现);

11. 以后只要是见到Bpxxx的是在client进程,Bnxxx的是在service进程;


Main_mediaserver初始化

int main(int argc, char** argv)
{
    sp<ProcessState> proc(ProcessState::self());
    sp<IServiceManager> sm = defaultServiceManager();
    AudioFlinger::instantiate();
    MediaPlayerService::instantiate();
    CameraService::instantiate();
    AudioPolicyService::instantiate();
    ProcessState::self()->startThreadPool();
    IPCThreadState::self()->joinThreadPool();
}

主要进行以下几步:

1. 创建ProcessState,每个进程就一个ProcessState;

2. 获得ServiceManager,defaultServiceManager()返回的其实是BpServiceManager,在new BpServiceManager时,传入的参数其实就是BpBinder,逐步保存在了BpRefBase中的mRemote中,而这个BpBinder的mHandle是0,这个0就是ServiceManager的索引值;

3. 注册各个服务,在后面详细说明;

4. ProcessState::self()->startThreadPool()和IPCThreadState::self()->joinThreadPool(),这俩是开启两个线程,这两个线程其实完成同样的工作,就是检测是否有发往binder的数据和binder有没有数据发来,这在以后篇章详细讲解,本篇在关系到这两类时会简单说明;

这个进程就开始工作了,它提供了四个服务,下面详细说明如何注册一个服务。


CameraService注册服务

1. BinderService通过defaultServiceManager()->addService(String16(SERVICE::getServiceName()), new SERVICE());

2. defaultServiceManager其实是BpServiceManager,addService则执行remote()->transact(ADD_SERVICE_TRANSACTION, data, &reply);

3. remote()其实是BpBinder,transact执行IPCThreadState::self()->transact(mHandle, code, data, reply, flags),注意mHandle是0,代表ServiceManager;

4. IPCThreadState::self()->transact执行writeTransactionData(BC_TRANSACTION, flags, handle, code, data, NULL)和waitForResponse(reply),很明显就是发送数据,然后等待响应;

5. writeTransactionData其实并不直接将数据发送到binder驱动,而是将数据写到了mOut缓冲区,mOut是Parcel,该类是封装和驱动交互数据的数据格式(如果精通binder,要清楚这个格式);

6. waitForResponse调用talkWithDriver()获得binder的答复;

至此,基本经过六步,注册服务就完成了,这里只是介绍了简单的工作流程。

【文本分析学习】Anaconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码) NLTK 文本分析学习之 Anadconda+pytorch虚拟环境下的pycharm文本分析(含分词、词性标注、词形归一化、停用词、文本情感分析、词频、文本相似度,附数据代码) 阅读详情

相关推荐

用OpenNI2获取奥比中光Astra Pro及 Astra Pro SM输出的深度图(win,linux arm64 x64平台)

搞了一个奥比中光Astra Pro,想在windows平台,和linux rk3588 上获取深度信息,之前的驱动下载已经不好用了。

babytiger的专栏 1305

binder机制原理分析(二):普通Service注册到ServiceManager

一般service注册到ServiceManager都经过五个步骤: sp proc = (ProcessState::self());获取ProcessState实例; sp sm = defaultServiceManager();获取IServiceManager实例; XXXService::Instantiate();调试用addService方法,将XXX服务注册到sm中去; ProcessState::self()—>startThreadPool();开启binder线程池; IPC

massonJ的博客 984

别再只接个放大器了!压电传感器测量电路(电压/电荷放大器)的5个实战配置要点

本文深入解析压电传感器测量电路中的5个关键实战配置要点,包括电缆长度选择、输入阻抗匹配、过载保护设计、低频噪声抑制及放大器选型策略。特别针对电压放大器和电荷放大器的应用场景差异提供工程实践建议,帮助工程师有效解决信号失真、噪声干扰等常见问题,提升测量精度和系统可靠性。

weixin_26869081的博客 302

Android Binder与服务注册过程

纪伯伦说:“你无法同时拥有青春和关于青春的知识;因为青春忙于生计,没有余暇去求知;而知识忙于寻求自我,无法享受生活。” 序言 跑去图书馆自习了一天,看了一天Binder,效率还是蛮高的。特别推荐,同时想在以后每篇博文写几句文艺或者鸡汤或者高逼格的话,提高各类姿势水平吧。回到正题,讲讲Binder,我将从为什么要有Binder,Binder...

weixin_33800593的博客 766

【开源】STM32+ESP8266+MQTT多传感器数据上云OneNET(易拓展,带操作系统FreeRTOS)

【开源】STM32+ESP8266+MQTT多传感器数据上云OneNET(易拓展) 文章目录【开源】STM32+ESP8266+MQTT多传感器数据上云OneNET(易拓展)1. 相关连接1.1 本项目相关连接1.2 无操作系统简易版(旧版,有OneNET云平台设备创建和应用配置,本文不再赘述):2. 具体功能3. 硬件环境4. 云平台环境配置5. 接线6. 功能展示6.1 数据流6.2 APP应用管理6.3 串口数据7. 源码详解7.1 源码文件解析7.2 服务器与wifi配置相关7.3 源码框架7.4

ssssadw的博客 2万+

云架构师进阶【SAP迁移方案设计】手把手教您玩转SAP上云

一,项目背景介绍 今天又接到了北京某制造企业SAP迁移的场景,先简单说明一下,好好的SAP在运行着为什么要做迁移这类大动作呢?众所周知SAP的ERP是企业的绝对核心系统,尤其对于制造业更是核心的系统,这样一套核心系统还是生产环境在迁移的过程中必然要面临比较大的挑战,如果有任何问题的话,都会对企业的绩效产生很大的影响。 经过跟客户沟通才得知,客户的SAP原来的系统是托管在运营商机房里,近期感染了勒索病毒,导致业务宕机,SAP应用服务器无法启动,仅有的数据库服务器可以运行。基于上述情况公司领导当机立断决定迅

bdsh818的博客 4220

android binder机制,注册系统服务---服务端servicemanager

4服务端servicemanager service_manager.c的svcmgr_handler有关注册和获取服务的处理如下, case SVC_MGR_GET_SERVICE: case SVC_MGR_CHECK_SERVICE: s = bio_get_string16(msg, &len); if (s == NULL) {

Jack的博客 1269

Zemax操作33--5倍激光扩束器

5倍扩束

lzy750750的博客 2931

Android如何注册服务到ServiceManager?

Binder作为Android进程通信的基础,在整个系统中扮演着十分重要的角色,理解binder的原理是能帮助我们更好的理解Android系统架构,如ActivityManagerService, WindowManagerService等运行机理。在上一篇文章里(http://blog.youkuaiyun.com/jason_wzn/article/details/54583373),着重介绍了Androi

wzn2119的专栏 1万+

从机械臂示教到厨房做饭:ACT模仿学习如何让机器人更“人性化”?

本文探讨了ACT(Action Chunking with Transformers)模仿学习技术如何让机器人更“人性化”,特别是在厨房等复杂场景中的应用。通过动作分块(Action Chunking)和时态融合(Temporal Ensemble)技术,机器人能够像人类一样记忆和执行复杂任务,如烹饪。文章还分析了ACT在家庭场景中的落地挑战及其在康复医疗、柔性制造等领域的跨领域应用潜力。

weixin_30613343的博客 255

MAC-H3C官网inode客户端下载安装

MAC-H3C官网inode客户端下载安装

兴趣是最好的老师 1万+

Android - Binder机制 - ProcessState和IPCThreadState

以下几篇文章是较深入分析binder机制。 目录 1. Android - Binder机制 - ServiceManager 2. Android - Binder机制 - 普通service注册 3. Android - Binder机制 - 获得普通service 4. Android - Binder机制 - client和普通service交互 5. Android - Bi...

淡淡的宁静的博客 1172

【Proteus仿真】51单片机+DAC0832+LM358放大电路波形发生器

【Proteus仿真】51单片机+DAC0832+LM358放大电路波形发生器

perseverance51博客 5786

Android - Binder机制

Android - Binder机制  学习要点 : 1. Android - Binder机制 - ServiceManager 2. Android - Binder机制 - 普通service注册 3. Android - Binder机制 - 获得普通service 4. Android - Binder机制 - client和普通service交互 5. Android - B

颇锐克(公众号:颇锐克科技共享) 493

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IMSL CNL 7.0.0 (x86-64)Crack

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

Android - Binder机制 - Binder框架总结

以下几篇文章是较深入分析binder机制。 目录 1. Android - Binder机制 - ServiceManager 2. Android - Binder机制 - 普通service注册 3. Android - Binder机制 - 获得普通service 4. Android - Binder机制 - client和普通service交

9527的专栏 427

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Content Provider(内容提供器),Broadcast(广播), Service(服务)

注意四大组件在使用前必须在manifests中进行注册,都是在中注册。Content Provider(内容提供器)Content Provider(内容提供器)并不常见,下面写一下读取联系人的代码:resolver = getContentResolver(); Uri uri = ContactsContract.CommonDataKinds.Phone.CON

chenmeng911的博客 1106

Android 广播机制(BroadcastReceiver)深度解析与实战指南 —— 基于 YCBlogs 仓库的源码级梳理

> 本指南以 YCBlogs 仓库中 [android/01.基础组件/09.BroadCastReceiver.md](https://link.gitcode.com/i/219458d96d3f6494083f270f8ca99063) 为核心骨架,并结合同目录姊妹篇 [android/01.基础组件/08.BroadCastReceiver.md](https://link.gitcode

gitblog_00809的博客 385

Android - Binder机制 - ServiceManager

以下几篇文章是较深入分析binder机制。 目录 1. Android - Binder机制 - ServiceManager 2. Android - Binder机制 - 普通service注册 3. Android - Binder机制 - 获得普通service 4. Android - Binder机制 - client和普通service交互 5. Android -

等等... 大雄,有啦! 4576

binder机制原理分析(四):java层service的注册过程

步骤一、初始化注册jni对象 Binder通信最终还是依赖与native层,java层的binder是native层binder的一个封装,实现还是在native层,这个映射关系在系统初始化的时候(在AndroidRuntime.cpp中)就将javaBinder和nativeBinder进行建立。并分别有结构体与之对应,如gBinderOffset与Binder、gBinderInternalOffset与BinderInternal、gBinderProxyOffset与BinderProxy的映射关系

massonJ的博客 589

Android深入浅出之Binder机制

Android深入浅出之Binder机制

QG 435

Android ServiceManager启动源码解析:Binder通信总机与系统服务注册机制

在Android系统架构中,进程间通信(IPC)是支撑系统服务与应用交互的核心机制。Binder作为Android特有的IPC框架,通过驱动层的内核模块实现高效的数据传输与进程隔离。其核心原理在于利用内存映射与引用计数机制,在保证安全性的同时实现跨进程方法调用。这一技术价值在于构建了Android系统服务的松耦合架构,使得ActivityManager、WindowManager等核心服务能够独立运行并协同工作。在应用场景中,任何系统服务的注册与发现都依赖于一个中央协调组件。ServiceManager正是

weixin_30411819的博客 456

Android细说binder机制

Android深入浅出之Binder机制一 说明 Android系统最常见最难搞明白的就是Binder了,很多很多的Service就是通过Binder机制来和客户端通讯交互的。所以搞明白Binder的话,在很大程度上就能理解程序运行的流程。 我们这里将以MediaService的例子来分析Binder的使用:l ServiceManager,这是Android OS的整个服务的管

成长的味道 1013

Android - Binder机制 - 获得普通service

以下几篇文章是较深入分析binder机制。 目录 1. Android - Binder机制 - ServiceManager 2. Android - Binder机制 - 普通service注册 3. Android - Binder机制 - 获得普通service 4. Android - Binder机制 - client和普通service交互 5. Android -

等等... 大雄,有啦! 2906
上一篇: Android - Binder机制 - ServiceManager
下一篇: Android - Binder机制 - 获得普通service
G机器猫
博客等级 码龄16年 106粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值