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中渲染应用图标;