从 Zygote 进程创建应用程序时会克隆哪些信息?

What information are cloned when an application is created from Zygote process?

我知道 android 在每次应用程序启动期间从 Zygote 克隆一个新进程的概念 - 从 zygote 克隆哪些信息。我不清楚是什么信息(是否克隆了与少数系统组件相关的信息)。

  1. 为什么它真的是从Zygote进程克隆出来的?

  2. Zygote进程克隆了哪些信息?

  3. 为什么Zygote需要成为每个应用进程的父进程?

虽然 android 决定这样做 - 想知道是否有任何明确的技术推理可供人们更好地理解。

Zygote 进程将所有 android 框架预加载到内存中。这样,当从 zygote 派生一个新的(app)进程时,它已经加载了框架,从而加快了应用程序的启动。 Linux'内存页的写时复制机制甚至避免了框架代码在内存中的重复。 Zygote 还在分叉后设置各种安全上下文设置,以确保所有进程都有适当的上下文(尤其是 SELinux)。