0%

第7章:Android启动过程简析

第一个系统进程(init)

Android设备的启动必须经历3个阶段: Boot Loader、Linux Kernel 以及 Android 系统服务,默认情况下它们都有各自的启动画面。作为Android 中第一个被启动的进程,init的 PID 的值为 0,它通过解析 init.rc 脚本来构建出系统的初始运行形态——其中最重要的就是启动 ServiceManager、Zygote 和 SystemServer。

Android 的“DNS服务器”——ServiceManager

ServiceManager 是Binder 机制中的“DNS服务器”,负责域名(某Binder服务在 ServiceManager 注册时提供的名称) 到IP地址(由底层Binder驱动分配的值)的解析。

ServiceManager 所属class 是core ,并且带有 critical 选项,说明它是系统的关键进程——意味着如果进程不幸在4分钟内异常退出4次,则设备将重启并进入还原模式。当 ServiceManager 重启时,zygote、media、surfaceflinger 等都会被重启。

“孕育” 新的线程和进程——Zygote

这个单词是”受精卵”的意思,正如其名所示,Android 中大多数的应用进程和系统进程都是通过 Zygote 来生成的。它所在的程序名叫做”app_process” ,而不像 ServiceManager 一样在一个独立的进程中。在init 进程的帮助下,通过zygote 逐步建立起 SystemServer 的运行环境。

Android的“系统服务”——SystemServer

SystemServer 是 Android 进入 Launcher 前的最后准备。ZygoteInit 通过 Zygote.forkSystemServer 来生成一个新的进程,用于承载各系统服务。

谢谢你的鼓励