7.1 第一个系统进程(init)
Android 设备的启动必须经历3个阶段,即 Boot Loader、Linux Kernel 和 Android 系统服务,默认情况下它们都有各自的启动界面。作为 Android 中第一个被启动的进程,init 的 PID 值为0。它通过解析 init.rc 脚本来构建出系统的初始运行形态,其中最重要的就是 ServiceManager、Zygote 和 SystemServer。
7.2 系统关键服务的启动解析
Android 的“DNS服务器” -- ServiceManager
ServiceManager 是 Binder 机制中的“DNS服务器”,负责域名(某 Binder 服务在 ServiceManager 注册时提供的名称)到IP地址(由底层Binder驱动分配的值)的解析。
“孕育”新的线程和进程 -- Zygote
Zygote 字面意思是“受精卵”,Android 中大多数的应用进程和系统进程都是通过 Zygote 来生成的。
在启动 app_process 执行 ZygoteInit 中会创建一个新的进程启动 System Server,而后 app_process 所在的进程转变为 Zygote 的“孵化器”守护进程。
Android 的“系统服务” -- SystemServer
若在 init.rc 中为 Zygote 制定了启动参数 --start-system-server,那么 ZygoteInit 就会调用 startSystemServer 来启动 SystemServer。
- Bootstrap Services(引导程序)
- Core Services(LED和背光管理器、电池电量管理器、应用程序使用情况管理器等)
- Other Services(xxService)