Android系统服务详解-android学习之旅(95)
2016-03-02 17:06
555 查看
本文是看完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学习之旅(95)
- 【Android】Service中判断当前是否全屏(状态栏是否隐藏)
- android应用框架理解
- android 退出应用最优雅的方式
- android 自定义checkbox
- Android中RxJava+Retrofit2.0+MVP模式的整合
- android开发那些事儿(四)--调用系统相机像素过低
- px、dp和sp这些单位有什么区别?
- Android自定义view
- Android游戏开发之游戏帧动画的播放与处理
- Android 使用ListView的A-Z字母排序功能实现联系人模块
- 如何解决Android开发中的【java.lang.unsatisfiedlinkerror findLibrary returned null.】 错误
- 基于Android 4.4 开发的多窗口系统 开放源码
- android 输入框等控件的移动
- 浅谈Android Support Library 23.2新增夜间模式主题
- Android L中水波纹点击效果的实现
- Android学习笔记----广播接收者
- Gradle 打包知识整理-Android Studio
- Android应用增量升级