Android -- Android设备的启动流程概述

来源:互联网 发布:mac的绘画软件 编辑:程序博客网 时间:2024/06/05 03:48

Android -- Android设备的启动流程概述


最近回过头来在看Android系统的启动、及初始化流程,先把一些内容记录下来,以供自己后续回忆、查阅。


Init进程是Linux内核启动后创建的第一个用户进程,地位非常重要。Init进程在初始化过程中会启动很多重要的守护进程。

从系统角度看,Android的启动过程可分为bootloader引导、装载和启动Linux内核、启动Android系统3个大阶段。其中Android系统的启动还可以细分为启动Init进程、启动Zygote进程、启动SystemService、启动SystemServer、启动Home等多个阶段。

(1)BootLoader引导
当按下手机电源键时,最先运行的就是bootloader。bootloader主要的作用就是初始化基本的硬件设备(CPU、内存、Flash等)并且通过建立内存空间映射,为装载Linux内核准备好合适的环境。一旦Linux内核装载完毕,bootloader将会从内存中清除。

如果用户在Bootloader运行期间,按下预定义的组合键,可以进入系统的更新模块。Android的下载更新可以选择进入fastboot模式或者recover模式。
fastboot是Android设计的一套通过USB更新手机分区映像的协议,方便开发人员能快速更新指定的手机分区。recovery模式是Android特有的升级系统。利用recovery模式,手机可以进行恢复出厂设置或者执行OTA、补丁和固件升级。进入Recovery模式实际上是启动了一个文本模式的Linux。

(2)装载和启动Linux内核
Android的boot.img存放的就是Linux内核和一个根文件系统。bootloader会把boot.img映像装载进内存。然后Linux内核会执行整个系统的初始化,完成装载根文件系统,最后启动Init进程

(3)启动Init进程
Linux内核加载完毕后,会首先启动Init进程,Init进程是系统的第一个进程。在Init进程的启动过程中,会解析Linux的配置脚本init.rc文件。根据init.rc文件的内容,Init进程会装载Android的文件系统、创建系统目录、初始化属性系统、启动Android系统重要的守护进程,这些进程包括USB守护进程、adb守护进程、vold守护进程等。Init进程也会启动ServiceMananger,它主要用来管理Binder服务,负责系统中所有Binder服务的注册和查询。
最后Init进程也会作为守护进程来执行属性修改请求,重启崩溃的进程等操作。

(4)启动Zygote进程
Init进程启动完成后,就会启动Zygote进程。Zygote负责fork出Android的应用进程,是所有应用进程的父进程。Zygote进程初始化时会创建虚拟机、预装载系统的资源文件和Java类。所有从Zygote进程fork出的用户进程将继承和共享这些预加载的资源,不浪费时间重新加载,加快了应用程序的启动过程。启动结束后,Zygote进程也会变为守护进程,负责响应启动apk应用程序的请求。

(5)启动SystemServer
SystemServer是Zygote进程fork出的第一个进程,也是Android系统的核心进程。SystemServer会启动大部分Android中重要的Binder服务和所有的Java核心服务。

(6)其他的Native服务
Init进程解析init.rc配置文件时,会启动其他的重要的本地Binder服务,如MediaServer等等。

(7)启动Launcher
SystemServer加载完所有的Java服务后,最后会调用ActivityManagerService的SystemReady()方法。在这个方法的执行中,会发出Intent”android.intent.category.HOME“。凡是响应这个Intent的apk都会运行起来,Launcher应用是Android系统默认的桌面应用,一般只有它会响应这个Intent,因此,系统开机后,第一个运行的应用就是Launcher。

待续......

0 0
原创粉丝点击