所在位置:主页 > 热门文章 >

热门文章
联系方式
Android应用程序进程启动过程的源代码分析(三)
发布时间:2019-01-28 编辑:AG集&#

上文的mDriverFD是设备文件/dev/binder的打开描述符,如果成功打开了这个设备文件,那么它的值就会大于等于0,因此,它的返回值为true。

回到Process.start函数中,它调用startViaZygote函数进一步操作。

Step 3. Process.startViaZygote

这个函数定义在frameworks/base/core/java/android/os/Process.java文件中:

  1. [java] view plaincopypublic class Process { 
  2. ...... 
  3. private static int startViaZygote(final String processClass, 
  4. final String niceName, 
  5. final int uid, final int gid, 
  6. final int[] gids, 
  7. int debugFlags, 
  8. String[] extraArgs) 
  9. throws ZygoteStartFailedEx { 
  10. int pid; 
  11. synchronized(Process.class) { 
  12. ArrayList argsForZygote = new ArrayList(); 
  13. // --runtime-init, --setuid=, --setgid=, 
  14. // and --setgroups= must go first 
  15. argsForZygote.add("--runtime-init"); 
  16. argsForZygote.add("--setuid=" + uid); 
  17. argsForZygote.add("--setgid=" + gid); 
  18. if ((debugFlags & Zygote.DEBUG_ENABLE_SAFEMODE) != 0) { 
  19. argsForZygote.add("--enable-safemode"); 
  20. if ((debugFlags & Zygote.DEBUG_ENABLE_DEBUGGER) != 0) { 
  21. argsForZygote.add("--enable-debugger"); 
  22. if ((debugFlags & Zygote.DEBUG_ENABLE_CHECKJNI) != 0) { 
  23. argsForZygote.add("--enable-checkjni"); 
  24. if ((debugFlags & Zygote.DEBUG_ENABLE_ASSERT) != 0) { 
  25. argsForZygote.add("--enable-assert"); 
  26. //TODO optionally enable debuger 
  27. //argsForZygote.add("--enable-debugger"); 
  28. // --setgroups is a comma-separated list 
  29. if (gids != null && gids.length > 0) { 
  30. StringBuilder sb = new StringBuilder(); 
  31. sb.append("--setgroups="); 
  32. int sz = gids.length; 
  33. for (int i = 0; i < sz; i++) { 
  34. if (i != 0) { 
  35. sb.append(','); 
  36. sb.append(gids[i]); 
  37. argsForZygote.add(sb.toString()); 
  38. if (niceName != null) { 
  39. argsForZygote.add("--nice-name=" + niceName); 
  40. argsForZygote.add(processClass); 
  41. if (extraArgs != null) { 
  42. for (String arg : extraArgs) { 
  43. argsForZygote.add(arg); 
  44. pid = zygoteSendArgsAndGetPid(argsForZygote); 
  45. ...... 

这个函数将创建进程的参数放到argsForZygote列表中去,如参数"--runtime-init"表示要为新创建的进程初始化运行时库,然后调用zygoteSendAndGetPid函数进一步操作。

http://www.bkjia.com/Androidjc/815632.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/815632.htmlTechArticle上文的mDriverFD是设备文件/dev/binder的打开描述符,如果成功打开了这个设备文件,那么它的值就会大于等于0,因此,它的返回值为true。 回...

本文源自: AG环亚娱乐

上一篇:iOS开发-植入广告(iAd, Admob实例)
下一篇:没有了
Copyright © 2005-2016 http://www.ichimail.com AG环亚娱乐_AG环亚官网_AG环亚集团_搜狐娱乐版权所有 AG环亚娱乐_AG环亚官网_AG环亚集团_搜狐娱乐