Android系统的启动流程
Android init 进程是系统开机启动之后执行的用户空间的第一个进程,它是 Linux 内核启动的第一个进程,在整个系统生命周期内始终存在。init 进程的主要职责是加载系统的配置,启动系统服务,初始化系统。并且管理系统的状态。它在系统启动过程中起着关键作用,是其他进程的父进程。
Init进程的作用:
- 启动系统的各个服务:通过启动Zygote->SystemServer->系统各种Service(AMS, PMS, WMS, IMS等)
- 配置系统环境变量和属性。
- 管理用户空间进程的启动.
- 初始化硬件设备和挂载文件系统。
- 处理系统的各种启动和运行时事件。

逐层解释
-
Loader(引导层)
- Boot ROM:固化在芯片中的只读存储器,存放最基础的启动代码(第一段可执行代码)。
- Boot Loader:引导加载程序,负责初始化硬件、加载内核到内存,并启动操作系统。
-
Kernel(Linux 内核层)
- Kernel Daemons:内核守护进程,如 kswapd(内存管理)、kworker(工作线程)等。
- kthreadd(pid=2):内核线程守护进程,负责创建和管理内核线程。
- swapper(pid=0):空闲进程,当 CPU 无任务时执行。
- HAL(Hardware Abstraction Layer):硬件抽象层,将硬件驱动接口标准化,供上层调用。
-
C++ Framework (Native)(本地框架层)
- Init(pid=1):用户空间的第一个进程,负责启动系统服务和守护进程。
- Native Daemons:本地守护进程,如 servicemanager、surfaceflinger 等。
- Media Server:多媒体服务,管理音视频编解码、录制等。
- AudioFlinger:音频服务,负责音频流的混音和输出。
- MediaPlayerService:媒体播放服务,提供播放、录制等接口。
-
Java Framework(Java 框架层)
- JNI(Java Native Interface):Java 与 C/C++ 代码交互的桥梁。
- Android Runtime:包含 ART(Android Runtime),负责执行 Dex 字节码。
- Zygote:Android 特有的进程孵化器,预加载 Java 框架资源,快速创建新应用进程。
-
System Server(系统服务层)
这是 Android 系统的核心服务集合,运行在 system_server 进程中:
- ActivityManager:管理应用生命周期、任务栈。
- WindowManager:管理窗口、界面布局、输入事件分发。
- PowerManager:管理电源状态(休眠、唤醒)。
- InputManager:管理输入设备(触摸、按键)事件。
-
Apps(应用层)
- Browser、Launcher、Phone、Email 等系统应用和用户应用,运行在独立的进程。
- 通过 Binder IPC 与系统服务通信,获取系统资源和服务。
总结流程:
- 硬件启动 → Boot ROM → Boot Loader。
- 加载内核 → 初始化硬件、进程调度、驱动。
- 启动用户空间 → Init → 系统服务与守护进程。
- 启动 Java 框架 → Zygote → 系统服务(System Server)。
- 启动应用层 → Launcher → 用户交互。