Android的启动过程与Zygote

android boot process diagram

Android系统和APP的启动过程:

Android系统的启动过程
BootLoader → Kernel → init → Native daemons → Android Runtime → Zygote → System Server → Activity Manager
App 启动过程
click launcher → startActivity() → startViaZygote() → fork()

  1. Linux内核
    Android 是基于Linux内核的系统平台,启动时,首先通过BootLoader(系统加载器),加载Linux内核。在Linux加载启动时,先初始化内核,然后调用init进程。
  2. init 进程
    Android init 进程对各种设备进行初始化,运行Android Framework所需用的各种Daemon、Context Manager、Media Server、 Zygote等。
  3. Zygote
    Zygote 进程用于缩短Android应用程序加载的时间,每当执行Java 应用程序时,Zygote 就会派生出一个子进程来执行应用程序,该子进程就是用来执行 Java 应用程序的虚拟机。
  4. System Server
    System Server 是Android 系统的一个核心进程,他有Zygote 进程创建,在Android 启动过程中位于 Zygote 之后。它建立了Android中的大部分服务,如Activity Manager Service, Location Manager Service。

Zygote

Android APP使用Java编写的,只能运行在虚拟机中。并且,每个应用程序都运行在各自的虚拟机中,应用程序每次运行都要重新初始化并启动虚拟机,这个过程会耗费相当成时间,是拖慢应用程序的原因之一。Zygote进程通过共享已运行的虚拟机的代码与内存信息,缩短应用程序所耗费的时间。并且, 它会时间将应用程序要使用的Android Framework中的类与资源(框架中的类、平台资源、XML信息、字符串等)加载到内存中,新进程直接使用这些类与资源,而不需要重新加载它们,这大大加快了程序的执行速度。

参考文献:《Android 框架解密》

你可能感兴趣的:(Android的启动过程与Zygote)