本文主要是介绍Android 进阶解密 - 系统启动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Android 进阶解密 - 系统启动
一、init
进程启动过程
init
进程是 Android 系统中用户空间的第一个进程,进程号为1,是 Android 系统启动流程中一个关键的步骤,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建 Zygote
(孵化器)和属性服务等。init
进程是由多个源文件共同组成的,这些文件位于源码目录 system/core/init
中。
init 进程启动总结
- 创建和挂载启动所需的文件目录。
- 初始化和启动属性服务。
- 解析
init.rc
配置文件并启动Zygote
进程。
二、Zygote
进程启动过程
在 Android 系统中,DVM
(Dalvik
虚拟机)和 ART
、应用程序进程以及运行系统的关键服务的 SystemServer
进程都是由 Zygote
进程来创建的,我们也将它称为孵化器。 它通过 fock
(复制进程)的形式来创建应用程序进程和 SystemServer
进程,由于 Zygote
进程在启动时会创建 DVM
或者 ART
,因此通过 fock
而创建的 应用程序进程和 SystemServer
进程可以在内部获取一个 DVM
或者 ART
的实例副本。
我们已经知道 Zygote
进程是在 init
进程启动时创建的,起初 Zygote
进程的名称并不是叫 “Zygote”
,而是叫 “app_process”
,这个名称在 Android.mk
中定义的,Zygote
进程启动后,Linux
系统下的 pctrl
系统会调用 app_process
, 将其名称换成了 “Zygote”
。
Zygote
进程启动总结
- 创建
AppRuntime
并调用其start
方法,启动Zygote
进程。 - 创建 Java 虚拟机并为 Java 虚拟机注册
JNI
方法。 - 通过
JNI
调用ZygoteInit
的main
函数进入Zygote
的 Java 框架层。 - 通过
registerZygoteSocket
方法创建服务器端Socket
,并通过runSelectLoop
方法等待AMS
的请求来创建新的应用程序进程。 - 启动
SystemServer
进程。
三、SystemServer
处理过程
SystemServer 进程主要用于创建系统服务,我们熟知的 AMS、WMS 和 PMS 都是由它来创建的,因此掌握 SystemServer 进程是如何启动的,它在启动时做了哪些工作是十分必要的。
SystemServer
进程启动总结
SystemServer 进程被创建后,主要做了如下工作:
- 启动 Binder 线程池,这样就可以与其他进程进行通信。
- 创建 SystemServerManager,其用于对系统的服务进行创建、启动和生命周期管理。
- 启动各种系统服务。(引导服务、核心服务和其他服务)
引导服务:AMS、PMS等等
四、Android
系统启动流程总结
1、SystemServer
进程启动总结
当电源键按下时引导芯片代码从预定义的地方(固化在 ROM)开始执行。加载引导程序 BootLoader 到 RAM,然后执行。
2、引导程序 BootLoader
引导程序 BootLoader 是在 Android 操作系统开始运行前的一个小程序, 它的主要作用是把系统 OS 拉起来并运行。
3、Linux
内核启动
当内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。当内核完成系统设置时,它首先在系统文件中寻找 init.rc 文件,并启动 init 进程。
4、init
进程启动
初始化和启动属性服务,并且启动 Zygote 进程。
5、Zygote
进程启动
创建 Java 虚拟机并为 Java 虚拟机注册 JNI 方法,创建服务器端 Socket,启动 SystemServer 进程。
6、SystemServer
进程启动
启动 Binder 线程池和 SystemServerManager,并且启动各种系统服务。
7、Launcher
启动
被 SystemServer 进程启动的 AMS 会启动 Launcher,Launcher 启动后会将已安装应用程序的快捷图标显示到界面上。
这篇关于Android 进阶解密 - 系统启动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!