Android 启动流程分析总结

Android 系统启动流程的归纳与总结

前言

本文主要是自己在阅读时候的一些记录,方便后续的归纳总结,好记性不如烂笔头

开机启动

Android 是基于 linux 的一套系统,在用户开机以后,会县启动 linux 内核,当内核启动以后会先创建第一个进程(idle进程 也叫 swapper进程)pid为0 然后由0号进程去创建我们需要的pid为1 的进程(init进程)和 pid=2的 kthreadd进程(kthreadd进程)

拓展

  • linux启动的第一个进程是0号进程,是静态创建的
  • 在0号进程启动后会接连创建两个进程,分别是1号进程和2和进程。
  • 1号进程最终会去调用可init可执行文件,init进程最终会去创建所有的应用进程。
  • 2号进程会在内核中负责创建所有的内核线程
  • 0号进程是1号和2号进程的父进程;1号进程是所有用户态进程的父进程;2号进程是所有内核线程的父进程。

init进程

从idle进程中孵化出来的 init 进程

Zygote进程

init进程孵化出Zygote进程,Zygote进程是Android系统第一个Java进程(虚拟机进程),Zygote进程是所有Java进程的父进程。

SyetemServer进程

Zygote进程孵化出SyetemServer进程进程,ActivityManagerService(负责四大组件的启动、切换、调度) 也是在这个进程中被启动

架构分析

下面的这个图分析了总体的上面的流程

启动Launcher

  • SystemServer进程启动ActivityManagerService
  • ActivityManagerService会启动Launcher
  • Launcher启动后会将已安装应用的快捷图标显示到界面上

参考

阅读 刘望舒 Android系统启动流程系列

Android系统启动流程(一)解析init进程启动过程
Android系统启动流程(二)解析Zygote进程启动过程
Android系统启动流程(三)解析SyetemServer进程启动过程
Android系统启动流程(四)Launcher启动过程与系统启动流程

JsonChao

Android系统启动流程之init进程启动

其他

Android 系统启动流程