【Android基础回顾】三:Android启动流程
Android 系统的启动流程主要包括从设备加电开始,到系统完全启动并进入用户界面这一全过程,涉及到多个阶段。整个流程大致可以分为以下五大步骤:
1.Bootloader 阶段
这个阶段初始化硬件,启动内核(Linux Kernel)。
加电后,CPU从固定地址读取Boot ROM中的代码。Boot ROM会加载 Bootloader(如 Qualcomm 的 Little Kernel、Fastboot)。
Bootloader 做以下几件事:
初始化 CPU、内存(RAM)、电源管理芯片等基础硬件。
加载设备树(Device Tree)和内核镜像(zImage 或 Image.gz)。
把控制权交给内核(通过跳转到内核入口点)。
2.Linux Kernel 阶段
这个阶段主要是初始化系统核心组件,挂载根文件系统(RootFS)。
Kernel 开始执行,初始化调度器、中断控制器、内存管理、驱动等。
加载 initramfs(初始临时文件系统)。
挂载真正的 RootFS(一般为 system.img)。
启动第一个用户态进程 init。
3.init 进程阶段(用户空间初始化)
这个阶段启动核心服务和守护进程,为 Android Framework 做准备。
执行init.rc 脚本,配置服务和参数(如 zygote、servicemanager)。
启动 ueventd:管理设备节点的权限。
启动 vold:处理存储设备挂载。
4. Zygote 进程阶段
启动 Java 虚拟机,孵化(fork)出系统和应用进程。
init 启动 zygote(一个 Java 进程)。
Zygote 初始化 Dalvik/ART 虚拟机环境。
加载核心类库(如 android.*)、SystemServer。
后续所有 Java 应用进程都会由 Zygote 进程 fork() 出来。
5.SystemServer 与 Launcher 阶段
SystemServer是 Android Framework 的核心进程,负责启动系统服务。
包括 ActivityManagerService(AMS)、PackageManagerService(PMS)、WindowManagerService(WMS)等。
启动完成后,SystemServer 通知 AMS 启动 Launcher(桌面应用)。
总体流程如下:
Q&A
ServiceManager 在哪个阶段?
具体流程位置:
加电 → Bootloader → Kernel → init 进程 → 启动 ServiceManager → 启动 Zygote
首先,ServiceManager 是什么?它是 Binder IPC 的守护进程。
所有 Android 系统服务(如 AMS、WMS、PMS 等)都通过它注册和查找。
是 Android Binder IPC 的“注册中心”。
在 init.rc 脚本中可以找到类似的配置:
service servicemanager /system/bin/servicemanagerclass coreuser systemgroup system readproccriticalonrestart restart zygote
init 会解析 init.rc,并启动 /system/bin/servicemanager 这个可执行文件。
因为Zygote、SystemServer 启动后,都会通过 ServiceManager 注册或查询系统服务。所以 ServiceManager 必须在 Zygote启动之前完成启动。