Android应用程序进程启动过程的源代码分析(三)

上文的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.   }
  21.   if ((debugFlags & Zygote.DEBUG_ENABLE_DEBUGGER) != 0) {
  22.   argsForZygote.add("--enable-debugger");
  23.   }
  24.   if ((debugFlags & Zygote.DEBUG_ENABLE_CHECKJNI) != 0) {
  25.   argsForZygote.add("--enable-checkjni");
  26.   }
  27.   if ((debugFlags & Zygote.DEBUG_ENABLE_ASSERT) != 0) {
  28.   argsForZygote.add("--enable-assert");
  29.   }
  30.   //TODO optionally enable debuger
  31.   //argsForZygote.add("--enable-debugger");
  32.   // --setgroups is a comma-separated list
  33.   if (gids != null && gids.length > 0) {
  34.   StringBuilder sb = new StringBuilder();
  35.   sb.append("--setgroups=");
  36.   int sz = gids.length;
  37.   for (int i = 0; i < sz; i++) {
  38.   if (i != 0) {
  39.   sb.append(',');
  40.   }
  41.   sb.append(gids[i]);
  42.   }
  43.   argsForZygote.add(sb.toString());
  44.   }
  45.   if (niceName != null) {
  46.   argsForZygote.add("--nice-name=" + niceName);
  47.   }
  48.   argsForZygote.add(processClass);
  49.   if (extraArgs != null) {
  50.   for (String arg : extraArgs) {
  51.   argsForZygote.add(arg);
  52.   }
  53.   }
  54.   pid = zygoteSendArgsAndGetPid(argsForZygote);
  55.   }
  56.   }
  57.   ......
  58.   }

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

文章名称:Android应用程序进程启动过程的源代码分析(三)
本文路径:http://www.csdahua.cn/qtweb/news36/269486.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网