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系统的启动. 第一部分主要包含系统引导,核心和驱动程序等,因为它们不属于本篇要讲的内容 ...
随机推荐
- 分数拆分( Fractions Again, UVA 10976)-ACM
It is easy to see that for every fraction in the form (k > 0), we can always find two positive i ...
- atoi的实现
#include <iostream> using namespace std; int atoi(char* s) { int retval=0; int n=1; if (*s=='- ...
- 商务通代码API
<!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content ...
- openshif ssh proxy
最近google又被墙了.没办法 1:注册一个openshift账号.申请注册一个app,获取一个免费主机. https://www.openshift.com/ 2:去PuTTY官方网站下载pL ...
- Linux学习2
第三讲Linux常用命令04 压缩:gzip: 1.只能压缩文件,不能压缩目录 2.不保留源文件 解压缩:gunzip gzip -d ------------------------------ ...
- springtest+juint开发测试如下:
项目结构目录如下: UserMapper.java 为接口文件.User 为实体类.UserMapper.xml 为对应mybatis的xml文件.test为对应的测试包 applicationtes ...
- Following Orders
uva124:http://uva.onlinejudge.org/index.php?option=onlinejudge&page=show_problem&problem=60题 ...
- 使用SSH代理上IPV6(使用SSH端口转发)
这几个月在国外待着,一直担心我的六维账户怎么办,那可是个宝贝啊.我看网上说可以用六飞啊神马的在IPV6下上IPV6的网站,但是冒失现在六维封禁了非学校的IPV6地址,所以这些软件就不顶用了. 想到以前 ...
- 在浏览器控制台调试php程序
jsp中用system.out.print如果是在eclipse中调试的话,eclipse会自动拦截系统输出流, 然后输出在控制台中,而http输出流则不受影响,php好像无此功能, PHP是一种服务 ...
- ♫【Backbone】this
Backbone.js Event Binding MyView = Backbone.View.extend({ events: { 'click .item': 'handleClick' }, ...