Android进阶解密-第2章Android系统启动

虽然第2章Android系统启动看得比较晕,但还是想把一些总结性的内容做个笔记,加深自己对Android系统启动的理解。

1. init进程启动过程:init进程启动做了很多的工作,总的来说主要做了以下三件事:
a. 创建和挂载启动所需的文件目录。
b. 初始化和启动属性服务。
c. 解析init.rc配置文件并启动Zygote进程。

2. Zygote进程启动过程:DVM(Dalvik虚拟机)和ART、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,也称为孵化器。Zygote进程共做了以下几件事:
a. 创建AppRuntime并调用其start方法,启动Zygote进程。
b. 创建Java虚拟机并为Java虚拟机注册JNI方法。
c. 通过JNI调用ZygoteInit的main函数进入Zygote的Java框架层。
d. 通过ZygoteSocket方法创建服务器端的Socket,并通过runSelectLoop方法等待AMS的请求来创建新的应用程序进程。
e. 启动SystemServer进程。

3. SystemServer处理过程:SystemServer进程创建后,主要做了如下工作:
a. 启动Binder线程池,这样就可以与其他进程进行通信。
b. 创建SystemServerManager,其用于对系统的服务进行创建、启动和生命周期管理。
c. 启动各种系统服务。

4. Launcher启动过程:系统启动的最后一步,是启动一个应用程序来显示系统中已经安装的应用程序,这个应用程序就叫做Launcher。通俗来讲Launcher就是Android系统的桌面,它的作用主要有以下两点:
a. 作为Android系统的启动器,用于启动应用程序。
b. 作为Android系统的桌面,用于显示和管理应用程序的快捷图标或者其他桌面组件。

最后总结一下Android系统启动流程:

1. 启动电源以及系统启动
当电源按下时引导芯片代码从预定义的地方(固化在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进阶解密-第2章Android系统启动_第1张图片

 

你可能感兴趣的:(Android进阶解密,Android系统启动)