在Android 11系统启动流程中,系统启动主要经历了以下几个阶段:
-
引导加载程序(Bootloader)启动:
- 当设备加电后,首先运行的是ROM Bootloader,它负责验证操作系统映像的完整性、初始化基本硬件并加载内核镜像。
-
Linux内核启动:
- Bootloader加载Linux内核并将其放入内存,内核开始执行,进行自我初始化,包括检测和配置硬件设备、挂载根文件系统(ramdisk)、启动第一个用户态进程------init进程。
-
init进程启动:
- init进程(pid为1)是Android系统中所有其他进程的父进程。init在启动时会解析
init.rc
配置文件,按照文件中的指令顺序启动必要的系统服务、守护进程、以及其他的init服务脚本。
- init进程(pid为1)是Android系统中所有其他进程的父进程。init在启动时会解析
-
启动Zygote进程:
- init会启动Zygote进程,Zygote是Android系统中所有应用程序进程的母进程。Zygote预先加载了Dalvik/ART虚拟机和大部分Android框架库,它通过 fork() 系统调用快速创建新的应用程序进程。
-
SystemServer启动:
- Zygote接下来会孵化SystemServer进程,SystemServer负责启动系统服务,如ActivityManagerService、PackageManagerService、WindowManagerService等核心服务,构建Android系统的运行时环境。
-
启动SurfaceFlinger服务:
- SystemServer会启动SurfaceFlinger服务,负责管理和合成各个应用窗口,为显示输出做好准备。
-
启动Launcher及其他应用:
- ActivityManagerService负责启动系统桌面(Launcher),以及其他必要的系统应用和服务。当Launcher启动并加载完毕后,用户就可以看到并操作主屏幕。
-
用户登录及解锁屏幕:
- 用户输入密码、图案或生物识别信息解锁设备,系统完成认证后展示完整的用户界面。
-
应用加载与启动:
- 当用户点击应用图标时,通过Binder IPC机制,AMS与Zygote合作创建新的应用程序进程,加载并启动目标应用。
在整个启动流程中,Android系统采取了一系列优化措施,如预先加载共享库、缓存系统服务等,以加快系统启动速度和应用加载效率。随着版本迭代,Android系统启动流程的具体细节可能会有所调整和优化。