Android系统完成的启动流程,从系统层次角度可分为Linux系统层、Android 系统服务层、Zygote进程模型三个阶段;从开机到到启动Home Launcher 完成具体的任务细节可分为七个步骤:
1. 按下电源键进行系统启动
按下电源键,触发引导芯片,引导芯片从预定义的地方(在ROM)开始执行,加载引导程序BootLoader 到RAM中(检查RAM,初始化硬件参数)。
2. 启动 BootLoader 引导程序
引导程序 BootLoader 是在 Android 操作系统开始运行前的一个小程序,它的主要作用是将 AndroidOS 拉起来。
3. 启动 Linux 内核
当内核启动时,设置缓存、被保护存储器、计划列表、加载驱动、完成系统设置。当内核完成系统设置后,它首先会在系统文件中寻找 init.rc 文件,并启动 init.rc 进程。
4. 启动 init 进程
init 进程启动做了很多工作,主要是:
- 创建和挂载启动所需文件目录;
- 初始化和启动系统属性服务。
- 解析 init.rc 配置文件并启动 Zygote 进程。
5. 启动 Zygote 进程孵化器
Zygote 进程启动:
- 创建Java虚拟机并为 Java虚拟机注册JNI方法;
- 创建服务端Socket;
- 预加载类和资源;
- 启动SystemServer进程;
- 等待AMS请求创建新的应用进程。
6. 启动 SystemServer 进程:
SystemServer 进程启动:
- 创建和启动 Binder 线程池,这样可以和其它进程进行通信;
- 创建 SystemServiceManager,其用于对系统的服务进行创建、启动和生命周期的管理;
- 启动系统的各种服务,包括AMS,WMS,PMS等。
7. 启动Launcher
被 SystemServer 启动的 AMS 会启动Launcher,到此 Android 启动流程结束。
简述
当按电源键触发开机,首先会从 ROM 中预定义的地方加载引导程序 BootLoader 到 RAM 中,并执行 BootLoader 程序启动 Linux Kernel, 然后启动用户级别的第一个进程: init 进程。init 进程会解析init.rc 脚本做一些初始化工作,包括挂载文件系统、创建工作目录以及启动系统服务进程等,其中系统服务进程包括 Zygote、service manager、media 等。在 Zygote 中会进一步去启动 system_server 进程,然后在 system_server 进程中会启动 AMS、WMS、PMS 等服务,等这些服务启动之后,AMS 中就会打开 Launcher 应用的 home Activity,最终就看到了手机的 “桌面”。