所在位置:主页 > 编程技术 >

编程技术
联系方式
Android应用程序进程启动过程的源代码分析(二)
发布时间:2019-01-28 编辑:AG88

上文我们调用了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. if (supportsProcesses()) { 
  9. try { 
  10. return startViaZygote(processClass, niceName, uid, gid, gids, 
  11. debugFlags, zygoteArgs); 
  12. } catch (ZygoteStartFailedEx ex) { 
  13. ...... 
  14. } else { 
  15. ...... 
  16. return 0; 
  17. ...... 

这里的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. return ProcessState::self()->supportsProcesses(); 
  4. ProcessState::supportsProcesses函数定义在frameworks/base/libs/binder/ProcessState.cpp文件中: 
  5. [cpp] view plaincopybool ProcessState::supportsProcesses() const 
  6. return mDriverFD >= 0; 

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

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

http://www.bkjia.com/Androidjc/815633.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/815633.htmlTechArticle上文我们调用了Process.start函数开始为应用程序创建新的进程。 注意,它传入一个第一个参数为android.app.ActivityThread,这就是进程初始化时要...

本文源自: AG环亚娱乐

上一篇:IOS-本地存储-NSUserDefaults
下一篇:没有了
Copyright © 2005-2016 http://www.ichimail.com AG环亚娱乐_AG环亚官网_AG环亚集团_搜狐娱乐版权所有 AG环亚娱乐_AG环亚官网_AG环亚集团_搜狐娱乐