1、启动Linux基础系统,然后引导加载Linux Kernel并启动初始化进程(Init)。

启动Init进程
2、启动Linux守护进程(daemons)。这个过程主要需要启动以下内容:
a、启动USB守护进程(usbd)来管理USB连接。
b、启动Android Debug Bridge守护进程(adbd)来管理ADB连接。
c、启动Debug守护进程(debuggerd)来管理调试进程的请求(包括内存转换等)。
d、启动无线接口守护进程(rild)来管理无线通信。

启动Linux守护进程
3、在启动Linux守护进程的同时还需要启动Zygote进程。它主要包括以下需要启动和注册内容:
a、初始化一个Dalvik虚拟机实例。
b、装载Socket请求所需的类和监听。
c、创建虚拟机实例来管理应用程序的进程。

启动Zygote进程
4、初始化runtime进程,在这个过程中需要处理以下操作:
a、初始化服务管理器。
b、注册服务管理器,以它作为默认Binder服务的Context管理器。

初始化runtime进程
5、启动系统服务。
runtime进程初始化之后,runtime进程将发送一个请求到Zygote,开始启动系统服务,这时Zygote将为系统服务进程建立一个虚拟机实例,并启动系统服务。

启动系统服务
6、启动本地服务并注册。
系统服务启动完后,将启动原生系统服务,主要包括Surface Flinger和Audio Flinger。这些本地系统服务将注册到服务管理器(Service Manager)作为IPC服务的目标。

启动本地服务并注册
7、启动Android管理服务。
本地服务启动完后,系统服务将启动Android管理服务,Android管理服务将都被注册到服务管理器上。

启动Android管理服务
8、Android启动之后运行Home和Contacts等进程。
当系统加载完所有的服务之后会处于等待状态,等待程序运行。但是,每一个应用程序都将启动一个单独的进程。如图所示,系统启动了一个Home进程和一个Contacts进程。到这里,系统的整个启动过程就结束了。
