android核心服务初探
终于进入android学习的进阶阶段,第一个课题是android的核心服务。首先,让我们来认识一下核心服务。
android核心服务与app服务有所区别。app服务继承自Service基类,在app运行时启动并绑定到Activity上。核心服务是在设备开机时解析init.rc文件预装在系统中的,早于任何一个app进程和app服务。app服务是有ActivityManangerServiec启动并绑定,而核心服务必须在ServiceManager中注册。
核心服务有分为native service和android service两种。一般来说,native service有c/c++编写,主要实现靠近驱动层的功能,android service由java编写,主要实现靠近app的功能。不管是何种核心服务,都运行在于app不同的进程中,因此,app想要与核心服务通信就必须使用IPC。
IPC是android中解决进程间通信的精巧框架,代码不多,功能强大。进程A想要与服务所在的进程B通信,必须先获取到服务的IBinder接口。IBinder接口,主要实现进程间的关联,将会在进程A中诞生一个BinderProxy。这个代理类,运行在进程A,将代理所有对进程B中的服务请求。对于进程A来说,就像是自身拥有这个服务。使用这样的client-server结构完美的实现了高内聚低耦合。
前面提到核心服务由ServiceManager启动和管理,其他进程要访问某服务都必须通过ServiceManager才能拿到IBinder接口。启动核心服务时,其中至关重要的一环是将核心服务登录到ManagerService中,代码如下:
int r = defaultServiceManager()->addService(String16("xxx"),new SQRService);
此时,意味着该核心服务可以被请求和绑定。请求IBinder接口代码如下:
m_ib = sm->getService(String16("xxx"));
从软硬整合的角度来说,核心服务的存在是为了让上层java应用程序使用Driver/HW Device特色的重要管道。基于android的开源特性,不同硬件厂家会有自主设计、性能各异的硬件设备,合理编写c层核心服务有利于充分发挥硬件特性。底层的优越设计将为上层应用的性能和用户体验提供强力支撑,可谓android框架中力与美的结合。
设计心得
刚才提到的client-server结构是IPC框架中的重要思想,我们在编写JNI层小框架的时候,也可以应用这个思想。其中的关键之处便是将控制点下移到c层,将服务程序封装在自己的框架中,高内聚低耦合。c层负责获取核心服务的IBinder接口并建立java层的BinderProxy对象,将BinderProxy的接口返回到java层。 代码如下:
sp<IServiceManager> sm = defaultServiceManager();
m_ib = sm->getService(String16("xxx");
jObject ibj = javaObjectForIBinder(env,mib);
android核心服务初探的更多相关文章
- 《Android 性能测试初探》
移动测试站点推荐: https://testerhome.com/ 专项相关帖子推荐: <Android 性能测试初探>合集 移动无线应用专项测试浅谈 公开课: [腾讯课堂]Testerh ...
- Android Activity初探
原地址:Android Activity初探 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供一个 ...
- 十九、Android Activity初探
原文:十九.Android Activity初探 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供 ...
- Android 性能测试初探(六)
书接前文 Android 性能测试初探之功耗(五) 本节聊聊性能测试的最后一项- 流量,当然我所指的性能测试是针对大部分应用而言的,可能还有部分应用会关注网速.弱网之类的测试,但本系列文章都不去一一探 ...
- Android 性能测试初探(五)
书接上文 Android 性能测试初探之 GPU(四) 前文说了的一些性能测试项大家可能都听说,接下来我们聊聊大家不常关注的测试项- 功耗 . 功耗测试主要从以下几个方面入手进行测试 测试手机安装目标 ...
- Android 性能测试初探(四)
书接上文 Android 性能测试初探(三) 自从 cpu及内存后,GPU 这个词对于 PC 性能测试者也不陌生了,什么 3Dmax,安兔兔之类的第三方软件让 GPU 在移动端性能测试领域都知晓,但对 ...
- Android 性能测试初探(三)
书接上文 Android 性能测试初探(二) 本文接着往下聊,今天主聊 CPU 及 内存 看到这两个名词,做过PC性能测试的就比较熟悉了,同样的性能测试关注点 :) 首先说说内存,移动端关注的是内存消 ...
- Android 性能测试初探(二)
书接前文 Android 性能测试初探(一).上回大体介绍了下在 android 端的性能测试项,现在我们就细节测试项做一些阐述(包括如何自己 DIY 测试). 首先我们来说说启动时间.关于应用的启动 ...
- Android核心服务解析篇(三)——Android系统的启动
从大的方面来说.Android系统的启动能够分为两个部分:第一部分是Linux核心的启动,第二部分是Android系统的启动. 第一部分主要包含系统引导,核心和驱动程序等,因为它们不属于本篇要讲的内容 ...
随机推荐
- __call方法简介
作用:当程序试图调用不存在或不可见的成员方法时,PHP会先调用__call方法来储方法名及参数. __call方法包含两个参数:即方法名和方法参数.其中,方法参数是以数组形式存在的.
- HDU 1996
Problem Description n个盘子的汉诺塔问题的最少移动次数是2^n-1,即在移动过程中会产生2^n个系列.由于发生错移产生的系列就增加了,这种错误是放错了柱子,并不会把大盘放到小盘上, ...
- ural1057Amount of Degrees
Description Create a code to determine the amount of integers, lying in the set [ X; Y] and being a ...
- IOS QuartzCore核心动画框架
IOS QuartzCore核心动画框架 核心动画框架 使用核心动画需要引入的框架:#import CALayer: CoreAnimation CALayer就是UIView上的图层,很多的CALa ...
- 转:misc_register、 register_chrdev 的区别总结
杂项设备(misc device) 杂项设备也是在嵌入式系统中用得比较多的一种设备驱动.在 Linux 内核的include/linux目录下有Miscdevice.h文件,要把自己定义的misc d ...
- 关于C#的委托
作者 陈嘉栋(慕容小匹夫) 阅读目录 0x00 前言 0x01 从观察者模式说起 0x02 向Unity3D中的SendMessage和BroadcastMessage说拜拜 0x03 认识回调函数 ...
- Microsfot SQL Server 2012 日志收缩
//Microsfot SQL Server 2012 日志收缩 USE DataBaseName;GO ALTER DATABASE DataBaseNameSET RECOVERY SIMPLE; ...
- Unity3D 3D横版跑酷
Unity3d 3D横版跑酷系列(Character Controller组件) @广州小龙 目前在做一个3D跑酷的横版游戏,目前说一下 Character Controller组件! 1.Slop ...
- RichEdit中插入带背景色文本的一种思路
uses RichEdit; function TextToRtf( // 将文本处理为RTF格式 mText: WideString // 输入文本 ): WideString; // 返回处理后的 ...
- Lua table使用
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Th ...