本文主要内容

  • 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,于是,用户就能看到手机桌面了。

更多相关文章

  1. 重新解压打包android 根文件系统 ramdisk.img
  2. Android系统服务概要

随机推荐

  1. Android主流三方库源码分析(四、深入理解G
  2. Android(安卓)数字证书详解
  3. Android(安卓)Mqtt客户端的接入
  4. ym——安卓巴士总结了近百个Android优秀
  5. Android(安卓)ActivityGroup实现tab功能
  6. android 单元测试方法 类继承 Instrument
  7. 关于Android中非UI线程中操作UI线程中的
  8. [Android(安卓)UI界面] 转:学习Android界
  9. Android短信发送器的实现
  10. YUV420P、YUV420SP、NV12、NV21和RGB互相