Android系统服务详解-android学习之旅(95)
本文是看完android框架揭秘第六章后的总结
android系统服务提供最基本的,最稳定的核心功能,如设备控制,信息通知,通知设定,以及消息显示等,存在于Android Framework与Android Libraries,如下图:
系统服务分类:本地系统服务和java层系统服务
1.本地系统服务主要包括Audio Flinger,Surface Flinger,Media Player Service,Camera Service,Audio Policy Service等 ,除了Surface Flinger由System Server进程启动之外,其他都由Media Server进程启动
Audio Flinger介绍:Audio Flinger服务混合多种应用程序的音频数据,并发送到耳机,扬声器等音频输出设备中。在android设备种中,所有的音频数据都经过Audio Flinger进行输出,如下图:
Surface Flinger服务介绍:Surface Multimedia的一部分,在Android的实现中,它是一个服务,她提供系统范围的Surface Composer功能,能够将各种应用程序的Surface组合后,渲染到Frame Buffer设备中,如下图:
java系统服务介绍:java系统服务由SystemServer系统进程启动,它分为:核心平台服务和硬件服务
核心平台服务一般不会与应用程序进行交互,他们是Android Framework运行所必须的服务。主要的服务如下表:
硬件服务提供了一系列的API,用于控制底层的硬件,主要服务如下表:
使用java系统服务 :无论是在Framework内部还是android的程序中,都需要使用能够与各服务通信的Local Manager对象,如下图:
运行系统服务
一般的使用应用程序服务前,先调用strat Service()启动应用程序的服务,但是系统服务不需要,直接调用getSystemService()即可。因为Android在系统启动的过程中,init进程已经启动了这些系统服务。
在Android启动时候,系统服务具体由媒体服务器(Media Server进程) 与系统服务服务器(System Server进程)启动。具体如下图:
Media Server进程的运行代码分析,这个进程运行除了Surface Flinger之外的本地系统服务,是由init进程启动
生成并初始化本地服务是由Media Server的main()函数负责的,主要代码如下:
分析系统服务的初始化代码 :系统服务与Framework中的其他模块通信时,使用Binder IPC,系统服务这类服务提供者必须把相关的信息注册到Context Manager。代码如下图:
defaultServiceManager()函数会返回Service Manager对象,它是一个代理对象,用来实现Service Manager与Binder之间的通信。在Framework中,若想使用Context Manager的注册和获取服务的功能,必须使用Service Manager。如下图:
分析System Server进程的运行代码 :init.rc脚本的代码如下:
加载android_server库:SystemServer的main()方法的主要功能是加载android-server的库(libandroid-serve.so),并调用init1() 方法,init1()方法通过JNI调用system-init()本地函数,代码如下:
Surface Flinger是寄予C++的服务,而System Server是java进程,所以必须经由JNI通过System_init()函数来运行Surface Fliger服务,初始化代码如下:
上面的callStatic()方法是C++调用java方法的JNI方法,它调用了init2()
java系统服务的注册和初始化
init2()方法完成对java系统服务的初始化,init2()创建ServerThread对象,然后启动他。ServerThread是一个java 线程,它可以初始化java的所有的系统服务
java系统服务的注册和本地系统服务的注册有一定差别,它是通过调用ServiceManager类的addService()方法,讲自身注册到Context Manager ,代码如下:
相关的几篇博客链接如下:
Android的启动过程分析(从进程和Framework的角度
Android的Context Manager(服务管理器)源码剖析
Android Binder IPC详解
总结一下java系统服务的启动过程,如下图:
Android系统服务详解-android学习之旅(95)的更多相关文章
- 【Android】详解Android Service
目录结构: contents structure [+] Service简单概述 Service在清单文件中的声明 Service启动服务 Service绑定服务 扩展Binder类 使用Messen ...
- 【Android】详解Android的menu菜单
在软件应用过程中,菜单的存在是必不可少的,我这次讲一下,我对android菜单的一个基础做法吧 Android的菜单分为三种类型:选项菜单(Option Menu).上下文菜单(Context Men ...
- 【Android】详解Android Activity
目录结构: contents structure [+] 创建Activity 如何创建Activity 如何创建快捷图标 如何设置应用程序的名称.图标与Activity的名称.图标不相同 Activ ...
- 【Android】详解Android动画
目录结构: contents structure [+] 补间动画 使用java代码实现Alpha.Rotate.Scale.Translate动画 通过xml文件实现Alpha.Rotate.Sca ...
- 【Android】详解Android 网络操作
目录结构: contents structure [+] 判断网络 判断是否有网络连接 判断WIFI网络是否可用 判断MOBILE网络是否可用 获取当前网络连接的类型信息 监听网络 获取网络信息需要在 ...
- 【Android】详解Android动画之Interpolator插入器
Interpolator英文意思是: 篡改者; 分类机; 校对机 SDK对Interpolator的描述是:An interpolator defines the rate of change of ...
- Android Binder IPC详解-Android学习之旅(96)
linux内存空间与BInder Driver Android进程和linux进程一样,他们只运行在进程固有的虚拟空间中.一个4GB的虚拟地址空间,其中3GB是用户空间,1GB是内核空间 ,用户空间是 ...
- Android进阶(十四)Android Adapter详解
Android Adapter详解 Android是完全遵循MVC模式设计的框架,Activity是Controller,layout是View.因为layout五花八门,很多数据都不能直接绑定上去, ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
随机推荐
- Erlang标准数据结构的选择
Erlang标准数据结构的选择(金庆的专栏)gen_server with a dict vs mnesia table vs etshttp://stackoverflow.com/question ...
- [csdn markdown]使用摘记一源代码高亮及图片上传和链接
本文主要内容是体验csdn markdown的代码块高亮显示和图片链接及上传. 图片上传 上边这是标题行,只需要使用一个#就可以表示,几个表示是几级标题 图片上传 本地图片上传控件 本地图片上传方式 ...
- 在非ViewController中显示AlertController的方法
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 以前我们可以在任何类中使用UIAlertView的show实例 ...
- python地理数据处理库geopy
http://blog.csdn.net/pipisorry/article/details/52205266 python地理位置处理 python地理编码地址以及用来处理经纬度的库 GeoDjan ...
- 学习TensorFlow,打印输出tensor的值
在学习TensorFlow的过程中,我们需要知道某个tensor的值是什么,这个很重要,尤其是在debug的时候.也许你会说,这个很容易啊,直接print就可以了.其实不然,print只能打印输出sh ...
- Linux的sleep()和usleep()
1.sleep和usleep都是linux中的程序挂起函数.只是时间的单位不一样. 2. sleep的基本单位是s(秒),也可以用m(分).h(小时). 例: sleep 1 : 挂起1秒 sleep ...
- 插件占坑,四大组件动态注册前奏(一) 系统Activity的启动流程
转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52190050 前言:为什么要了解系统Activity,Service,,BroadCa ...
- C++三目运算符的增强
<p>// 在C语言中表达式的结果放在寄存器中 // 在C语言中,表达式的返回值是变量的值 // 在C++中,表达式返回的是变量的本身</p><pre name=&quo ...
- UNIX网络编程——socket概述和字节序、地址转换函数
一.什么是socket socket可以看成是用户进程与内核网络协议栈的编程接口.socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信. socket API是一层抽象的网络 ...
- 《java入门第一季》之HashSet存储自定义对象问题以及注意事项
上一篇http://blog.csdn.net/qq_32059827/article/details/51578158 写到存储字符串类型的时候出现了无序,而且这个无序不是随机那种无序,它是有一定存 ...