其实Android系统的启动最主要的内容无非是init、Zygote、SystemServer这三个进程的启动,他们一起构成的铁三角是Android系统的基础。
init进程是在Linux内核加载完成后启动的,因此要想启动init进程,必须先加载Linux内核,而Linux则是由引导程序BootLoader拉起来的。
init进程主要用于初始化和启动属性服务,并启动Zygote进程。init进程的源码在system/core/init/init.cpp`下。
在Android系统中,DVM和ART、应用程序进程以及运行系统的关键服务SystemServer进程都是由Zygote进程来创建的,我们也可以将其称为孵化器。它通过fork的形式来创建应用程序进程和SystemServer进程。
这里需要注意的是,之前的所以初始化操作都是在Native层进行的,直到我们通过JNI调用ZygoteInit的main方法后,我们才进入了Java框架层。
SystemServer进程主要用于创建和启动系统服务,包括我们常用的AMS、WMS和PMS等。
Launcher通俗地说就是Android系统的桌面,是系统的门户,用于启动应用程序,其本质就是一个Activity,类名为"com.android.launcher3.Launcher",点击查看Launcher的AndroidManifest.xml。
systemReady
方法准备启动LauncherstartHomeActivityLocked
方法,使用ActivityStarter的 startHomeActivityLocked
启动Launcher。我们都知道Android系统架构是Linux Kernel、Android Runtime、Liberaries、Application Framework和Application这五个部分组成的,如下图所示:
那么Android系统在启动过程中,都经历了哪些架构组成部分呢?以下给出简要的示意图:
本文分享自 我的Android开源之旅 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!