Android系统启动流程
概述
- 启动电源时,芯片先从固定位置加载
BootLoader
并执行; - BootLoader拉起linux内核;
- linux内核启动后加载
init.rc
并启动init进程; - init进程中初始化并启动属性服务并启动
Zygote
进程; - Zygote负责创建JVM,注册JNI,创建服务端Socket,最后启动
SystemServer
; - SS中创建
Binder线程池
,并启动系统服务,包括AMS
和PMS
; - PMS负责安装APK,AMS则启动Launcher。
内核空间流程
- 按下开机键。
- 加载启动引导程序bootloader到内存并执行。
- 拉起linux内核,设置缓存,加载驱动.
用户空间流程
- 内核启动后,启动init进程(pid=1)调用init的入口main函数。
- 创建和挂载文件目录。
- 初始化并启动【属性服务】。
- 注册子进程信号处理函数,用来处理进程终止信号,防止僵尸进程。
- 解析init.rc文件,并启动Zygote。
- 根据不同系统读取不同的init。zygotexx.rc启动zygote进程(孵化器)。
- 启动SystemServer
- 创建launcher
Zygote启动流程
- 创建JVM;
- 通过JNI调用
ZygoteInit
这个类的main
函数,开始**进入java框架层*(´▽`ʃ♡ƪ); - 创建一个Socket服务端;
- fork出SystemServer进程(该进程中启动系统服务);
- 调用
zygote.runSelectLoop
死循环,开始监听AMS的请求。
SystemServer的处理过程
SystemServer
进程用来创建系统服务,如AMS、WMS和PMS等,他的处理过程为:
- 启动Binder线程池;
- 创建
SystemServerManager
,用于对系统服务创建、启动和生命周期管理; - 启动系统服务。
这里提取一个关键点:SystemServerManager
是用来管理系统服务的。
Launcher启动过程
- SystemServer启动时会同时启动
AMS
和PackageManagerService
; - 而PMS启动后会安装APK;
- AMS会调起Launcher;
- Launcher在
onCreate
中渲染应用图标;