1. init进程启动过程
主要代码文件目录:system/core/init/
总结
init 进程启动做了很多的工作,总的来说主要做了以下三件事:
(1)创建和挂载启动所需的文件目录。
(2)初始化和启动属性服务。
(3)解析 init.rc 配置文件并启动 zygote 进程。
2. Zygote进程启动过程
在init进程中通过 AppRuntime 类(/frameworks/base/cmds/app_process/app_main.cpp)并调用其 start 方法 ,启动 Zygote 进程。
总结
Zygote 进程启动共做了如下几件事情:
(1)创建 Java 虚拟机并为 Java 虚拟机注册 JNI 方法
(2)通过JNI调 用 Zygotelnit的 main 函数进入 Zygote的 Java 框架 层。
(3)通过 registerZygoteSocket方法 创建服务器端 Socket ,并通过 runSelectLoop 方法 等 AMS 的请求来创建新的应用程序进程。
(4)启动 SystemServer 进程。
3. SystemServer进程启动过程
在ZygoteInit.java的forkSystemServer方法中启动了SystemServer进程,代码在如下目录:frameworks/base/core/java/com/android/internal/os/Zygotelnit.java
总结
SystemServer 进程被创建后,主要做了如下工作:
(1)启动 Binder 线程池,这样就可以与其他进程进行通信。
(2)创建 SystemServiceManager ,用于对系统的服务进行创建、启动和生命周期管理。
(3)启动各种系统服务。
4. Launcher启动过程
通俗来讲 Launcher 就是 Android 系统的桌面,它的作用主要有以下两点:
(1)作为 Android 系统的启动器,用于启动应用程序
(2)作为 Android 系统的桌面,用于显示和管理应用程序的快捷图标或者其他桌面组件。
启动Launcher的入口为AMS(ActivityManagerServer)的sytemReady方法,它在SystemServer的startOtherServices方法中被调用,代码目录:frameworks/base/services/java/com/android/server/SystemServer.java
5. Android 系统启动流程
总结
1. 启动电源以及系统启动
当电源按下时引导芯片代码从预定义的地方(固化在 ROM )开始执行。加载引导程序 BootLoader到RAM ,然后执行。
2. 引导程序 Bootloader
引导程序 BootLoader 是在 Android 操作系统开始运行前的一 个小程序,它的主要作用是把操作系统 拉起来并运行。
3. Linux 内核启动
当内核启动时 ,设置缓存、被保护存储器、计划列表、加载驱动。当内核完成系统设置时,它首先在系统文件中寻找 init.rc 文件,并启动 init 进程。
4. init 进程启动
初始化和启动属性服务,并且启动 Zygote 进程。
5. Zygote 进程启动
创建Java 虚拟机并为 Java 虚拟机注册 JNI 方法 ,创建服务器端 Socket ,启动SystemServer 进程。
6. System Server 进程启动
启动 Binder 线 程池和 SystemServiceManager ,并且启动各种系统服务。
7. Launcher 启动
SystemServer 进程启动的 AMS 会启动 Launcher, Launcher 启动 后会将己安装应用的快捷图标显示到界面上。