zygote优化.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android深入浅出之Zygote 一 目的 zygote,是Android搞出来的一个东西。网上讲这个的也非常多。第一次看到这个名字我就挺郁闷,想干嘛这是?Linux下名字都取得挺通俗易懂,深得人心。zygote?不就想模仿Linux下的fork吗?个人觉得Google取名字挺怪,包括Google本身。 不管怎样,Zygote依然是Android系统的核心,zygote是受精卵的意思,可以认为是Android framework大家族的祖先!我们本节的目的是描述下zygote的来龙去脉,顺便揭露下它的短处,以后大家可以对症下药,变异一个更加优良的品种。 二Zygote zygote本身是一个应用层的程序,和驱动,内核模块之类的没点关系。这下大家放心点了吧?zygote的启动由linux的祖先init启动。这个在init分析中提过。这里就不说了。 zygote,ps中看到的进程名叫zygote,其最初的名字是app_process,通过直接调用pctrl把名字给改成了”zygote”。不过不影响我们分析。 zygote的代码在framework/base/cmds/app_process/App_main.cpp中。我们一步步来看。 既然是应用程序,直接看main咯。 [----main] int main(int argc, const char* const argv[]) { //参数很重要啊,还记得init分析吗? //恩,这几个参数就是:(一定要记住我们的情景分析方法!) //zygote /system/bin/app_process //-Xzygote /system/bin --zygote --start-system-server // These are global variables in ProcessState.cpp mArgC = argc; mArgV = argv; mArgLen = 0; for (int i=0; iargc; i++) { mArgLen += strlen(argv[i]) + 1; } mArgLen--; AppRuntime runtime; //AppRuntime是个什么玩意儿?addVmArguments?好像和虚拟机有点关系喔 int i = runtime.addVmArguments(argc, argv); [---AppRuntime] class AppRuntime : public AndroidRuntime 从AndroidRuntime中派生而来,是和dalvik交互的一个方便类,这里先不说了。 [----main] ... int i = runtime.addVmArguments(argc, argv); .... if (i argc) { arg = argv[i++]; if (0 == strcmp(--zygote, arg)) { bool startSystemServer = (i argc) ? strcmp(argv[i], --start-system-server) == 0 : false; //废话,根据我们的参数,startSystemServer=true setArgv0(argv0, zygote); //改名字,不知道windows下的怎么改、linux下的可以用pctrl系统调用 set_process_name(zygote); //start?记住我们的参数 runtime.start(ernal.os.ZygoteInit, startSystemServer); } } else { return 10; } FT,app_main还是很简单的,但是runtime.start看起来不简单啊,传进去的那个参数 “ernal.os.ZygoteInit“挺像java类的命名规则。 2.1 AppRuntime 好了,代码进入到runtime.start(ernal.os.ZygoteInit,true)了。source insight直接进去看看。代码在framework/base/core/jni/AppRuntime.cpp中。 [---void Androi

文档评论(0)

wuailuo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档