【发布时间】:2016-10-19 05:21:41
【问题描述】:
我只想知道:
谁创建了
dalvik_Vm?zygote进程是在虚拟机中运行还是相反?
【问题讨论】:
我只想知道:
谁创建了dalvik_Vm?
zygote 进程是在虚拟机中运行还是相反?
【问题讨论】:
Dalvik VM 的作者是Dan Bornstein
每个 android 应用程序都在一个单独的进程中运行,都有自己的 Dalvik VM。
Zygote 是一个守护进程,其唯一任务是启动应用程序。这意味着 Zygote 是所有 App 进程的父进程。当 app_process 启动 Zygote 时,它会创建第一个 Dalvik VM 并调用 Zygote 的 main() 方法。一旦 Zygote 启动,它会预加载所有必需的 Java 类和资源,启动 System Server 并打开一个套接字 /dev/socket/zygote 以侦听启动应用程序的请求。
【讨论】:
添加一些例子来说明 Zygote 是所有 App 进程的父进程。 zygotePID:481,我的应用进程PPID:481,你可以用ps命令查看。
UID PID PPID C STIME TTY TIME CMD
root 481 1 0 09:17:54 ? 00:00:03 zygote
u0_a132 28993 481 78 09:07:53 ? 00:23:46 com.languouang.helloworld
u0_a132 29013 481 0 09:07:53 ? 00:00:01 com.languouang.helloworld:countservice
u0_a132 29296 481 1 09:09:04 ? 00:00:09 com.languouang.helloworld:mall
u0_a132 30427 481 1 09:16:42 ? 00:00:15 com.languouang.helloworld:faq
【讨论】:
Zygote 实际上是在引导进程启动时出现的 init 进程的子进程。 它负责加载执行我们的 Dalvik 字节码的 Dalvik 虚拟机。此外,它将所有必需的资源、所有共享的 java 类和资源预加载到内存中。
【讨论】: