Android系统启动流程(三)解析SystemServer进程启动过程
1.Zygote启动SystemServer进程
在上一篇文章中我们讲到在ZygoteInit.java的startSystemServer函数中启动了SyetemServer进程,如下所示。
frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
private static boolean startSystemServer(String abiList, String socketName)
throws MethodAndArgsCaller, RuntimeException {
...
if (pid == ) {
if (hasSecondZygote(abiList)) {
waitForSecondaryZygote(socketName);
}
handleSystemServerProcess(parsedArgs);
}
return true;
}
2.SystemServer进程启动过程
启动Binder线程池
3.解析SyetemServer进程
我们先来查看SystemServer的main函数: 
frameworks/base/services/java/com/android/server/SystemServer.java
public static void main(String[] args) {
        new SystemServer().run();
}
main函数中只调用了SystemServer的run函数,如下所示。
private void run() {
        ...
            System.loadLibrary("android_servers");//
        ...
            mSystemServiceManager = new SystemServiceManager(mSystemContext);//
            LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);
        ...
         try {
            Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "StartServices");
            startBootstrapServices();//
            startCoreServices();//
            startOtherServices();//
        } catch (Throwable ex) {
            Slog.e("System", "******************************************");
            Slog.e("System", "************ Failure starting system services", ex);
            throw ex;
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
        }
        ...
    }
4.总结SyetemServer进程
SyetemServer在启动时做了如下工作: 
1.启动Binder线程池,这样就可以与其他进程进行通信。 
2.创建SystemServiceManager用于对系统的服务进行创建、启动和生命周期管理。 
3.启动各种系统服务。
Android系统启动流程(三)解析SystemServer进程启动过程的更多相关文章
- Android系统启动流程(四)Launcher启动过程与系统启动流程
		此前的文章我们学习了init进程.Zygote进程和SyetemServer进程的启动过程,这一篇文章我们就来学习Android系统启动流程的最后一步:Launcher的启动流程,并结合本系列的前三篇 ... 
- Android系统启动流程(一)解析init进程启动过程
		整体流程大致如下: 1.init简介 init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等.in ... 
- Android系统启动流程(二)解析Zygote进程启动过程
		1.Zygote简介 在Android系统中,DVM(Dalvik虚拟机).应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也将它称为孵化器.它通过 ... 
- 笔记:Zygote和SystemServer进程启动过程
		简述 Android设备启动过程中,先是Linux内核加载完,接着Android中的第一个进程init启动,它会启动一些需要开机启动的进程. Zygote就是进程init启动起来的.Android中所 ... 
- Android应用程序进程启动过程(前篇)
		在此前我讲过Android系统的启动流程,系统启动后,我们就比较关心应用程序是如何启动的,这一篇我们来一起学习Android7.0 应用程序进程启动过程,需要注意的是“应用程序进程启动过程”,而不是应 ... 
- 【乘风破浪】Android系统启动流程整理
		前言 对于一个Android应用层开发者来说,了解Android系统的启动流程对理解Android系统有很大的帮助.这其中包含了大量的细节,而且前面很多步骤包含了C/C++实现的native层逻辑,作 ... 
- Android应用程序进程启动过程的源代码分析
		文章转载至CSDN社区罗升阳的安卓之旅,原文地址: http://blog.csdn.net/luoshengyang/article/details/6747696 Android 应用程序框架层创 ... 
- Android应用程序进程启动过程(后篇)
		前言 在前篇中我们讲到了Android应用程序进程启动过程,这一篇我们来讲遗留的知识点:在应用程序进程创建过程中会启动Binder线程池以及在应用程序进程启动后会创建消息循环. 1.Binder线程池 ... 
- ARM-Linux移植之(三)——init进程启动流程分析
		我们通常使用Busybox来构建根文件系统的必要的应用程序.Busybox通过传入的参数来决定执行何种操作.当init进程启动时,实际上调用的是Busybox的init_main()函数,下面我们来分 ... 
随机推荐
- Qt之实现360安全卫士主界面代码开源
			匆匆一年又过去了,总结去年一年的节奏就是忙爆了:生活忙.工作忙,值得庆幸的是没有瞎忙:今天打开博客园查看我的博客,才发现几乎差不多一年时间没写博客了:博客文章就是记忆,就是曾经努力过的见证,感谢博客园 ... 
- 深度学习笔记(八)Focal Loss
			论文:Focal Loss for Dense Object Detection 论文链接:https://arxiv.org/abs/1708.02002 一. 提出背景 object detect ... 
- Strom
			storm 实时分析概念 离线分析 通常是 需要一段时间的数据积累 积累到一定数量数据后 开始离线分析 无论数据量多大 离线分析 有开始 也有结束 最终得到 ... 
- hdu  5972---Regular Number(字符串匹配)
			题目链接 Problem Description Using regular expression to define a numeric string is a very common thing. ... 
- Mac 常用软件下载及使用教程地址推荐
			知您网: http://www.zhinin.com Xclient:http://xclient.info/?t=40707b872b81127fdfd1dc4700d1a155c12f35bd 音 ... 
- python中selenium操作下拉滚动条方法汇总
			UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等:但有一种是在当前显示的页面元素不可见,拖动下拉条后元素就出来了. 比如下面这样一个网页 ... 
- 关于jQuery的一些东西
			1.jQuery的选择器学习 基本选择器 id选择器 $("#id名") 返回的是存储了指定的HTML元素对象的数组 标签 ... 
- Spring Boot初识(3)- Spring Boot整合Swagger
			一.本文介绍 如果Web项目是完全前后端分离的话(我认为现在完全前后端分离已经是趋势了)一般前端和后端交互都是通过接口的,对接口入参和出参描述的文档就是Mock文档.随着接口数量的增多和参数的个数增加 ... 
- [APC001] D Forest
			Description 给定\(n\)个点\(m\)条边组成的森林,每个点有权值\(a_i\).现在需要将森林连成一棵树,选择两个点\(i,j\)连边的代价是\(a_i+a_j\),每个点最多被选择连 ... 
- Shell 数组定义与获取
			Shell 数组 bash支持一维数组(不支持多维数组),并且没有限定数组的大小. 类似与 C 语言,数组元素的下标由 0 开始编号.获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于 ... 
