Android启动过程

Android启动过程其实很简单,一张简单的时序图就讲清楚了。

Android系统启动主要经历了如下几个重要阶段:

  1. 机器上电启动bootloader
  2. 由bootloader启动linux系统
  3. 0号idle进程(PID=0,由系统自动创建, 运行在内核态)
  4. 1号init进程(PID=1,由idle创建,运行在用户空间 )
  5. 接着init加载init.rc的配置信息,fork出zygote进程及其它系统服务进程(比如servicemanager)
  6. zygote进程启动,它的主要使命就是fork出systemserver进程和所有的应用进程。
  • 在fork应用进程之前,要做一些初始化,供它的子进程直接继承(比如启动vm,注册jni函数,预加载资源、类等)。
  • 要想接听fork应用的请求,还要开启消息循环。但zygote用的不是binder而是socket。
  1. systemserver进程作为zygote启动的第一个子进程,它要启动很多重要的系统服务(比如AMS),这些服务都跑在systemserver进程里。
  • AMS是所有应用的总管家。应用的启动、生命周期的回调都通过它来完成的。这里注意应用和AMS通信是binder,AMS和zygote通信是socket。
  • 最后,在消息循环之前,会把lancher启起来。这样我们就看到所谓的桌面了。

时序图

更多Android相关时序图,请移步andych008/flow_chart)