上文我们调用了Process.start函数开始为应用程序创建新的进程。
注意,它传入一个***个参数为"android.app.ActivityThread",这就是进程初始化时要加载的Java类了,把这个类加载到进程之后,就会把它里面的静态成员函数main作为进程的入口点,后面我们会看到。
Step 2. Process.start
这个函数定义在frameworks/base/core/java/android/os/Process.java文件中:
[java] view plaincopypublicclassProcess {
......
publicstaticfinalintstart(finalString processClass,
finalString niceName,
intuid,intgid,int[] gids,
intdebugFlags,
String[] zygoteArgs)
{
if(supportsProcesses()) {
try{
returnstartViaZygote(processClass, niceName, uid, gid, gids,
debugFlags, zygoteArgs);
} catch(ZygoteStartFailedEx ex) {
......
}
} else{
......
return0;
}
}
......
}
这里的supportsProcesses函数返回值为true,它是一个Native函数,实现在frameworks/base/core/jni/android_util_Process.cpp文件中:
[cpp] view plaincopyjboolean android_os_Process_supportsProcesses(JNIEnv*
env, jobject clazz)
{
returnProcessState::self()->supportsProcesses();
}
ProcessState::supportsProcesses函数定义在frameworks/base/libs/binder/ProcessState.cpp文件中:
[cpp] view plaincopybool ProcessState::supportsProcesses() const
{
returnmDriverFD >=0;
}
这里的mDriverFD是设备文件/dev/binder的打开描述符,如果成功打开了这个设备文件,那么它的值就会大于等于0,因此,它的返回值为true。
回到Process.start函数中,它调用startViaZygote函数进一步操作。
【编辑推荐】
【责任编辑:闫佳明 TEL:(010)68476606】
点赞 0