Java ::Android框架::哪个是第一个跑步者,zygote还是dalvik?
我有一个关于Android框架的问题 互联网或书籍上显示的每个引导序列都显示了从受精卵到dalvik的流程,如下所示 然而,根据我的代码研究,init处理器在加载受精卵之前运行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
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_进程将其名称更改为“受精卵”。我明白你的意思。不管怎样,我真的很感谢你的帮助。也许这会有帮助