【发布时间】:2013-12-17 01:22:07
【问题描述】:
我有一个涉及 Android 框架的问题。
互联网或书籍中显示的每个启动序列都显示了从 zygote 到 dalvik 的流程如下。
但是,根据我的代码研究,init 处理器在加载 zygote 之前运行 app_process(app_main.cpp),如下所示:
[init.rc] :
service zygote **/system/bin/app_process** -Xzygote /system/bin --zygote --start-system-server
因为zygote(ZygoteInit.java)是java文件(一种类),需要dalvik虚拟机执行,所以app_process(app_main.cpp)初始化dalvik机器,准备启动。
然后通过 dalvik 加载 ZygoteInit.java。
因此,zygote 实际运行了。
在我看来,初始化和加载dalvik的进程不是zygote,而是app_process和zygote在dalvik之下,因为它是由java代码组成的。
唯一让我怀疑的是 app_main.cpp 中的一些代码。
查看app_main.cpp文件中的main函数,你可以找到如下几行:
[app_main.cpp] :
if (niceName && *niceName) {
setArgv0(argv0, niceName);
**set_process_name(niceName);**
}
niceName 指向字符串"zygote"。
这意味着使用set_process_name() 函数将app_process 更改为zygote 进程。如果是真的,一切正常。但我不知道事实是什么。
任何人都让我确定什么是第一。
尝试浏览android代码:
【问题讨论】:
标签: java android frameworks dalvik init