Android启动过程简析

本文主要内容

  • Android设备启动过程
  • init进程
  • 关键服务启动简析

Android设备启动过程

Android设备启动过程分为3个阶段,即Boot Loader,Linux Kernel和Android系统服务,默认情况下它们都有各自的启动动画。

Android启动过程简析_第1张图片

init进程是Android上启动的第一个进程,它通过解析init.rc脚本来构建出系统的初始运行状态,它会启动一系列服务。

Android启动过程简析_第2张图片

init进程

先来看看init.rc的语法。

一个完整的init.rc脚本由4种类型的声明组成,即:

  • Action,动作
  • Commands,命令
  • Services,服务
  • Options,选项

1、Actions

动作的一般格式如下:

一个Action,其实就是响应某事件的过程,即当所描述的触发事件产生时,依次执行各种command。

常见的trigger如下图:

Android启动过程简析_第3张图片

常见的command就有很多了,比如启动某个服务等。

2、Service

Service,这里就是指可执行程序,它们会在特定选项的约束下被init程序运行或者重启。它的一般格式为:

3、init.rc 实例分析

如上图所示,这是一个action实例,当系统启动时,触发boot事件,则创建dev目录。

如上图所示,这是一个Service实例,启动zygote。

关键服务启动简析

我们看看ServiceManager是如何被启动的。

Android启动过程简析_第4张图片

ServiceManager,它的可执行程序在/system/bin/servicemanager中,init.rc中指定它为core,并且声明它是非常重要的系统进程 critical,并且当ServiceManager重启时,zygote等进程也要重启。

zygote进程,也是由init.rc所启动的,Android中大多数应用进程和系统进程都是通过zygote来生成的,例如上层应用的进程都是由zygote fork出来的。

Android启动过程简析_第5张图片

值得一提的是,zygote 启动后会启动虚拟机。

如上图init.rc中所示,启动zygote时,指定了参数--start-system-server,那么zygote就会启动SystemServer。如首节Android启动过程图所示,SystemServer是用户承载各种Java系统服务的进程,比如ams,pms等等。当SystemServer启动ams完成之后,ams再启动launcher,于是,用户就能看到手机桌面了。

你可能感兴趣的:(Android启动过程简析)