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系统的启动. 第一部分主要包含系统引导,核心和驱动程序等,因为它们不属于本篇要讲的内容 ...
随机推荐
- Python,遍历目录下TXT
import os #获取根目录,递归得到所以txt文件的路径 list_dirs = os.walk(os.curdir) txtfilenames=[] for root, dirs, files ...
- Node.js npm
Node程序包管理器(NPM)提供了以下两个主要功能: 在线存储库的Node.js包/模块,可搜索 search.nodejs.org 命令行实用程序来安装Node.js的包,做版本管理和Node.j ...
- jQuery.dialog
本篇文章主要是对JQUERY中dialog的用法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 今天用到了客户端的对话框,把 jQuery UI 中的对话框学习了一下. 准备 jQ ...
- 对话Facebook人工智能实验室主任、深度学习专家Yann LeCun
对话Facebook人工智能实验室主任.深度学习专家Yann LeCun Yann LeCun(燕乐存),Facebook人工智能实验室主任,NYU数据科学中心创始人,计算机科学.神经科学.电子电气科 ...
- WIN版的Jenkins Master加入LINUX的SLAVE节点,并作C++程序的集成交付
这次深撸了一下JENKINS的配置,不敢说完全通了. 但对于整个体系,有了更新认识. 将LINUX作为SLAVE节点加入WIN的JENKINS里,网上有很多教程,依作即可. 在将相关任务分配给这个节点 ...
- HTML入门教程(全套)
http://www.rm5u.com/html_html.html http://learn.shayhowe.com/ moe.mwulu.com http://www.w3school.co ...
- 【转】Android实例剖析笔记(二)--用实例讲解Andriod的开发过程,以NotesList为实例介绍Android的菜单机制
原文网址:http://kb.cnblogs.com/page/78304/ 简介 android提供了三种菜单类型,分别为options menu,context menu,sub menu. op ...
- 数论(毕达哥拉斯定理):POJ 1305 Fermat vs. Pythagoras
Fermat vs. Pythagoras Time Limit: 2000MS Memory Limit: 10000K Total Submissions: 1493 Accepted: ...
- C#:ref和out的联系及区别
一:ref 关键字使参数按引用传递. 其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中.若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字. ...
- kafka安装与使用
一.下载 下载地址: http://kafka.apache.org/downloads.html kafka目录结构 目录 说明 bin 操作kafka的可执行脚本,还包含windows下脚本 co ...