天天看点

Android启动过程详解(1)——总体启动框架

在接下来的几篇博客中我会主要给大家讲一下android系统的启动过程,之前也断断续续讲过<code>packagemangerservice</code>和home程序的启动过程,但是没有系统的讲过,接下来将系统性地介绍整个系统的启动过程。包括主要的四大步骤:

init进程服务 native服务启动 systemserver,android服务启动 home应用程序启动

总体的启动流程如下图所示:

Android启动过程详解(1)——总体启动框架

接下来的《android启动过程详解》系列将以本图为框架进行介绍,重点包括四大步骤,以及各个步骤中的重点组件:<code>zygyte</code>,<code>servicemanager</code>,<code>dalvik vm</code>, <code>systemserver</code>,<code>activitymanagerservice</code>,<code>packagemanagerservice</code>等等。

本文首先对整体的启动过程做一个简单的梳理。

init是一个由内核启动的用户级进程,在linux内核启动完成后就会启动init进程,再由init进程来完成接下来加载过程。可以说init进程的启动才标志着android空间的启动。init进程一起来就根据init.rc和init.xxx.rc脚本文件建立了几个基本的服务:

(1) zygoteservice (2) servicemanager ……

这里的service并不是android应用层的service概念,而是为整个系统服务的基础服务,其实现也是在native层完成的。init.rc是android规定的初始化脚本,其包括了四种类型:

service commands options actions

而init程序正是通过读取init.rc的文件来读取相关配置:

读取init.rc的相关服务,添加到service_list中

通过service_start,建立service进程

在创建好zygoteservice之后,它就会fork出一个进的进程来运行systemserver,而systemserver最为重要的一个工作就是启动各个系统级的android应用服务,包括packagemanagerservice, activitymanagerservice,windowmanagerservice等等。systemserver会开启一个serverthread,然后在这个线程中启动上述各个service,并通过addservice添加对应的服务。

继续阅读