每周学一点——Android系统进程 Zygote

96
LiveMoment
2018.05.25 11:09* 字数 607

Android系统进程:Zygote

在Android系统中,所有的应用程序进程以及系统服务进程SystemServer都是由Zygote进程孕育(fork)出来的,这也许就是为什么要把它称为Zygote(受精卵)的原因。

总所周知,Android系统是基于Linux内核的,而在Linux系统中,所有的进程都是init进程的子孙进程,也就是说,所有的进程都是直接或者间接地由init进程fork出来的。Zygote进程也不例外,它是在系统启动的过程,由init进程创建的。

1. 系统启动时init进程会创建Zygote进程,Zygote进程负责后续Android应用程序框架层的其它进程的创建和启动工作。

2. Zygote进程会首先创建一个SystemServer进程,SystemServer进程负责启动系统的关键服务,如包管理服务PackageManagerService和应用程序组件管理服务ActivityManagerService。

3. 当我们需要启动一个Android应用程序时,ActivityManagerService会通过Socket进程间通信机制,请求Zygote进程为这个应用程序创建一个新的进程。

总结:

Zygote进程负责创建启动其他进程:SystemServer进程和应用程序等进程

1、系统启动时:init进程 -》Zygote进程 -》创建SystemServer进程, SystemServer进程-》启动系统的关键服务(AMS,PMS)

2、当需要一个启动一个程序时,AMS会通过Socket进程间通信机制,通知Zygote进程为这个应用程序创建一个新的进程

每创建一个进程,都会指定该进程启动时对应的java层的入口;
比如,App进程最终是由Zygote进程fork出来的,并且它在Java层的入口函数为ActivityThread类的静态成员函数main。

Android系统中的socket机制和binder机制一样,都是可以用来进行进程间通信。

参考:
https://blog.csdn.net/luoshengyang/article/details/6768304
Android应用程序进程启动过程的源代码分析
Android应用程序安装过程源代码分析
Android系统默认Home应用程序(Launcher)的启动过程源代码分析
Android进程间通信(IPC)机制Binder简要介绍和学习计划

https://www.cnblogs.com/tiantianbyconan/p/5013863.html

Android开发进阶