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

移动开发 Android
传入一个第一个参数为"android.app.ActivityThread",这就是进程初始化时要加载的Java类了,把这个类加载到进程之后,就会把它里面的静态成员函数main作为进程的入口点。

上文我们调用了Process.start函数开始为应用程序创建新的进程。

注意,它传入一个***个参数为"android.app.ActivityThread",这就是进程初始化时要加载的Java类了,把这个类加载到进程之后,就会把它里面的静态成员函数main作为进程的入口点,后面我们会看到。

Step 2. Process.start

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

  1. [java] view plaincopypublic class Process { 
  2.   ...... 
  3.   public static final int start(final String processClass, 
  4.   final String niceName, 
  5.   int uid, int gid, int[] gids, 
  6.   int debugFlags, 
  7.   String[] zygoteArgs) 
  8.   { 
  9.   if (supportsProcesses()) { 
  10.   try { 
  11.   return startViaZygote(processClass, niceName, uid, gid, gids, 
  12.   debugFlags, zygoteArgs); 
  13.   } catch (ZygoteStartFailedEx ex) { 
  14.   ...... 
  15.   } 
  16.   } else { 
  17.   ...... 
  18.   return 0
  19.   } 
  20.   } 
  21.   ...... 
  22.   } 

这里的supportsProcesses函数返回值为true,它是一个Native函数,实现在frameworks/base/core/jni/android_util_Process.cpp文件中:

  1. [cpp] view plaincopyjboolean android_os_Process_supportsProcesses(JNIEnv* 
  2. env, jobject clazz) 
  3.   { 
  4.   return ProcessState::self()->supportsProcesses(); 
  5.   } 
  6.   ProcessState::supportsProcesses函数定义在frameworks/base/libs/binder/ProcessState.cpp文件中: 
  7.   [cpp] view plaincopybool ProcessState::supportsProcesses() const 
  8.   { 
  9.   return mDriverFD >= 0
  10.   } 

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

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

责任编辑:闫佳明 来源: bbs.9ria
相关推荐

2014-06-20 11:20:37

Android应用程序进程启动

2014-06-19 14:54:11

Android应用程序进程启动

2014-06-19 14:59:40

Android应用程序进程启动

2014-06-19 14:25:04

Android应用程序进程启动

2014-06-20 11:24:34

Android应用程序进程启动

2014-06-20 11:09:35

Android应用程序进程启动

2014-06-20 11:05:56

Android应用程序进程启动

2012-02-20 14:47:08

JavaPlay

2014-05-22 15:00:16

Android消息处理机制Looper

2011-08-17 16:16:29

iPhone应用程序启动过程

2011-07-28 10:34:38

Cocoa 程序 启动

2014-06-23 10:31:09

Android启动过程

2011-06-28 13:27:13

ARM Linux

2014-07-31 10:06:01

谷歌Google应用

2018-03-13 13:00:03

Linux运维启动分析

2012-08-16 09:07:57

Erlang

2024-09-11 09:25:03

Tomcat组件PREP

2022-08-29 17:34:05

鸿蒙操作系统

2014-05-22 15:45:58

Android消息处理机制Looper

2009-08-14 17:57:43

ASP.NET MVC
点赞
收藏

51CTO技术栈公众号