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