Android系统启动流程

概述

  1. 启动电源时,芯片先从固定位置加载BootLoader并执行;
  2. BootLoader拉起linux内核;
  3. linux内核启动后加载init.rc并启动init进程;
  4. init进程中初始化并启动属性服务并启动Zygote进程;
  5. Zygote负责创建JVM,注册JNI,创建服务端Socket,最后启动SystemServer
  6. SS中创建Binder线程池,并启动系统服务,包括AMSPMS
  7. PMS负责安装APK,AMS则启动Launcher。

内核空间流程

  1. 按下开机键。
  2. 加载启动引导程序bootloader到内存并执行。
  3. 拉起linux内核,设置缓存,加载驱动.

用户空间流程

  1. 内核启动后,启动init进程(pid=1)调用init的入口main函数。
  2. 创建和挂载文件目录。
  3. 初始化并启动【属性服务】。
  4. 注册子进程信号处理函数,用来处理进程终止信号,防止僵尸进程。
  5. 解析init.rc文件,并启动Zygote。
  6. 根据不同系统读取不同的init。zygotexx.rc启动zygote进程(孵化器)。
  7. 启动SystemServer
  8. 创建launcher

Zygote启动流程

  1. 创建JVM;
  2. 通过JNI调用ZygoteInit这个类的main函数,开始**进入java框架层*(´▽`ʃ♡ƪ);
  3. 创建一个Socket服务端;
  4. fork出SystemServer进程(该进程中启动系统服务);
  5. 调用zygote.runSelectLoop死循环,开始监听AMS的请求。

SystemServer的处理过程

SystemServer 进程用来创建系统服务,如AMS、WMS和PMS等,他的处理过程为:

  1. 启动Binder线程池;
  2. 创建SystemServerManager,用于对系统服务创建、启动和生命周期管理;
  3. 启动系统服务。

这里提取一个关键点:SystemServerManager是用来管理系统服务的

Launcher启动过程

  1. SystemServer启动时会同时启动AMSPackageManagerService
  2. 而PMS启动后会安装APK;
  3. AMS会调起Launcher;
  4. Launcher在onCreate中渲染应用图标;