2.5、Android 系统启动流程
1、启动电源以及系统启动
2、引导程序 Bootloader
3、Linux 内核启动
4、init 进程启动
5、Zygote 进程启动
6、SystemServer 进程启动
7、Launcher 启动
2.6、本章小节
第2章名为 Android 系统启动,共有六个小节的内容:
-
1、init进程启动过程
-
2、Zygote进程启动过程
-
3、SystemServer处理过程
-
4、Launcher启动过程
-
5、Android系统启动流程
-
6、本章小节
2.1、init 进程启动过程
===============
init 进程是 Android 系统中用户空间的第一个进程,进程号为 1 ,是 Android 系统启动流程中一个关键的步骤,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建 Zygote (孵化器)和属性服务等。 init 进程是由多个源文件共同组成的,这些文件位于源码目录 system/core/init 中。
2.1.1、引入init 进程
为了讲解 init 进程,首先要了解 Android 系统启动流程的前几步,以引入 init 进程。
1、启动电源以及系统启动
当电源按下时引导芯片代码从预定义的地方(固化在 ROM)开始执行。加载引导程序BootLoader 到RAM 中,然后执行。
2、引导程序 Bootloader
引导程序 BootLoader 是在 Android 操作系统开始运行前的一个小程序,它的主要作用是把系统 OS 拉起来并运行。
3、Linux 内核启动
当内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。在内核完成系统设置后,它首先在系统文件中寻找 init.rc 文件,井启动 init 进程。
4、init 进程启动
init 进程做的工作比较多 ,主要用来初始化和启动属性服务,也用来启动 Zygote 进程。
从上面的步骤可以看出, 当我们按下启动电源时,系统启动后会加载引导程序, 引导程序又启动 Linux 内核,在 Linux 内核加载完成后,第一件事就是要启动 init 进程。
2.1.7、init进程启动总结
init 进程启动做了很多的工作,总的来说主要做了以下三件事:
-
创建和挂载启动所需的文件目 录。
-
初始化和启动属性服务。
-
解析 init.rc 配置文件并启动 Zygote 进程。
2.2、Zygote进程启动过程
================
在 上一小节节中我们学习了 init 进程启动过程,在启动过程中主要做了三件事,其中一件就是创建了 Zygote 进程,本节接着学习 Zygote 进程启动过程, 首先我们要了解 Zygote 是什么。
2.2.1、Zygote概述
在 Android 系统中, DVM (Dalvik 虚拟机)和 ART 、 应用程序进程以及运行系统的关键服务的 SystemServer 进程都是由 Zygote 进程来创建的,我们也将它称为孵化器。
2.2.4、Zygote进程启动总结
Zygote 进程启动共做了如下几件事 :
-
创建 AppRuntime 并调用其 start 方法,启动 Zygote 进程。
-
创建 Java 虚拟机并为 Java 虚拟机注册 JNI 方法 。
-
通过JNI调用 Zygotelnit 的
main 函数进入 Zygote 的 Java 框架层。 -
通过 registerZygoteSocket 方法创建服务器端 Socket ,并通过 runSelectLoop 方法等待 AMS 的请求来创建新的应用程序进程。
-
启动 SystemServer 进程。
2.3、SystemServer 处理过程
=====================
SystemServer 进程主要用于创建系统服务,我们熟知的 AMS 、 WMS 和 PMS 都是由它来创建的。
2.3.3、SystemServer 进程总结
SystemServer 进程被创建后,主要做了如下工作:
-
1 启动 Binder 线程池,这样就可以与其他进程进行通信 。
-
2 创建 SystemServiceManager ,其用于对系统的服务进行创建、启动和生命周期管理。
-
3 启动各种系统服务。
2.4、Launcher 启动过程
=================
此前已经学习了 Android 系统启动流程的 init 进程、 Zygote 进程和 SystemServer 进程,最后我们来学习 Launcher 的启动过程。
2.4.1、Launcher 概述
系统启动的最后一步是启动一个应用程序用来显示系统中已经安装的应用程序,这个应用程序就叫作 Launcher 。Launcher 在启动过程中会请求 PackageManagerService 返回系统中已经安装的应用程序的信息,并将这些信息封装成一个快捷图标列表显示在系统屏幕上,这样用户可以通过点击这些快捷图标来启动相应的应用程序。
通俗来讲 Launcher 就是 Andro id 系统的桌面,它的作用主要有以下两点:
系统启动的最后一步是启动一个应用程序用来显示系统中已经安装的应用程序,这个应用程序就叫作 Launcher 。Launcher 在启动过程中会请求 PackageManagerService 返回系统中已经安装的应用程序的信息,并将这些信息封装成一个快捷图标列表显示在系统屏幕上,这样用户可以通过点击这些快捷图标来启动相应的应用程序。
通俗来讲 Launcher 就是 Andro id 系统的桌面,它的作用主要有以下两点: