文档章节

Android系统服务详解-android学习之旅(95)

fengsehng
 fengsehng
发布于 2016/11/09 09:08
字数 1009
阅读 2
收藏 0

本文是看完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系统服务的启动过程,如下图:

这里写图片描述

本文转载自:http://blog.csdn.net/lpjishu/article/details/50781415

共有 人打赏支持
fengsehng
粉丝 4
博文 284
码字总数 214494
作品 0
朝阳
程序员
Android 源码分析之旅1--系统架构与分析方法、工具

《Android 源码分析之旅》目录 apefwkall.png 《Android 源码分析之旅》的全部目录将作如下安排: 第1章节——本篇文章,将介绍一些基本的概念、方法、工具。 第2章节——着重介绍Binder IP...

猴亮屏
2017/10/19
0
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
08/08
0
0
android白盒测试所需其他安卓开发内容链接整理

Android Intent实现Activity之间跳转并传值:http://www.linuxidc.com/Linux/2011-04/34228.htm android Intent机制详解:http://www.oschina.net/question/56506567909 Android开发中Inten......

智能小松鼠
2014/12/18
0
0
AndroidManifest.xml配置文件详解

AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅。下面是一个标准的AndroidManifest.xml文件样例。 [html] v...

sflfqx
2015/01/16
0
0
AndroidManifest.xml配置详解

AndroidManifest.xml配置文件对于Android应用开发来说是非常重要的基础知识,本文旨在总结该配置文件中重点的用法,以便日后查阅。下面是一个标准的AndroidManifest.xml文件样例。 [html]vi...

蓝狐乐队
2013/12/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

VS code编辑器安装 php7.2 NTS 版本 Xdebug

本文使用的是 phpstudy 一键安装包(windows32位) php 版本是 php7.2 NTS 1、在 phpstudy 面板中开启 phpdebug 扩展 // 其他选项菜单-> php 扩展与设置-> php 扩展 2、官方下载 Xdebug // ...

削个椰子皮_给个梨
16分钟前
1
0
Swagger中配置了@ApiModelProperty的allowableValues属性但不显示的问题

现在用Swagger来生成API文档的例子已经非常多了,今天碰到开发同事问了一个问题,帮着看了一下,主要还是配置方法的问题,所以记录一下。如果您也碰到了同样的问题,希望本文对您有用。 问题...

程序猿DD
47分钟前
1
0
sql 命令

show variables like '%general%'; show variables like '%log_output%'; show variables like '%quer%'; show global status like '%slow%';...

JavaSon712
54分钟前
2
0
Django修改默认数据库引擎

Django默认数据库引擎为sqlite3,除了sqlite3,还支持postgresql、mysql、oracle 配置如下:其中postgresql_psycopg2为postgresql的适配器。 'django.db.backends.postgresql' 'django.db.bac......

MichaelShu
今天
0
0
动画源码解析

目录介绍 1.Animation和Animator区别 2.Animation运行原理和源码分析 2.1 基本属性介绍 2.2 如何计算动画数据 2.3 什么是动画更新函数 2.4 动画数据如何存储 2.5 Animation的调用 3.Animator...

潇湘剑雨
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部