Java ::Android框架::哪个是第一个跑步者,zygote还是dalvik?

Java ::Android框架::哪个是第一个跑步者,zygote还是dalvik?,java,android,frameworks,dalvik,init,Java,Android,Frameworks,Dalvik,Init,我有一个关于Android框架的问题 互联网或书籍上显示的每个引导序列都显示了从受精卵到dalvik的流程,如下所示 然而,根据我的代码研究,init处理器在加载受精卵之前运行app\u进程(app\u main.cpp),如下所示: [init.rc] : service zygote **/system/bin/app_process** -Xzygote /system/bin --zygote --start-system-server 因为zygote(ZygoteInit.j

我有一个关于Android框架的问题

互联网或书籍上显示的每个引导序列都显示了从受精卵到dalvik的流程,如下所示

然而,根据我的代码研究,init处理器在加载受精卵之前运行
app\u进程(app\u main.cpp)
,如下所示:

[init.rc] : 

service zygote **/system/bin/app_process** -Xzygote /system/bin --zygote --start-system-server
因为
zygote(ZygoteInit.java)
是java文件(一种类),它需要执行dalvik虚拟机,所以
app_进程(app_main.cpp)
初始化dalvik机器并使其准备好启动

然后通过dalvik加载
ZygoteInit.java

因此,合子实际上是运行的

在我看来,初始化和加载dalvik的进程不是zygote,而是app_进程和zygote在dalvik之下,因为它是由java代码组成的

唯一让我怀疑的是app_main.cpp中的一些代码。

查看
app_main.cpp
文件中的
main
函数,您可以找到以下几行:

[app_main.cpp] :

       if (niceName && *niceName) {

            setArgv0(argv0, niceName);

            **set_process_name(niceName);**

       }
niceName
指向字符串
“受精卵”

这意味着使用
set\u process\u name()
函数将
app\u process
更改为受精卵过程。如果这是真的,一切都好。但我不知道事实是什么

任何人都要让我知道什么是第一位的

尝试在以下位置浏览android代码:


Dalvik作为可加载库在Android上发布<代码>应用程序进程链接并使用该库。同样地,
app\u进程
在自己的进程内启动一个Dalvik VM

合子只是这种情况的一个特例


因此,为了更直接地回答您的问题:在典型的启动过程中,运行的第一个Dalvik VM是在
app_进程
进程中产生的,并且它被传递参数,导致它成为运行系统的合子进程。

如您所说,使DVM app_进程的某些元素成为合子进程,并将init进程传递的参数作为init.rc文件中的描述。是吗?不是100%确定你的意思,但我想答案是“是的”。好的。让我确定一下。rc文件是对init进程的待办事项列表的描述。当init进程调用app_进程时,它会给app_进程提供一些关于合子的参数。字符串“zygote”就是这些参数之一。所以使用它,app_进程将其名称更改为“受精卵”。我明白你的意思。不管怎样,我真的很感谢你的帮助。也许这会有帮助