Android應(yīng)用程序進程啟動過程的源代碼分析(二)
上文我們調(diào)用了Process.start函數(shù)開始為應(yīng)用程序創(chuàng)建新的進程。
注意,它傳入一個***個參數(shù)為"android.app.ActivityThread",這就是進程初始化時要加載的Java類了,把這個類加載到進程之后,就會把它里面的靜態(tài)成員函數(shù)main作為進程的入口點,后面我們會看到。
Step 2. Process.start
這個函數(shù)定義在frameworks/base/core/java/android/os/Process.java文件中:
- [java] view plaincopypublic class Process {
- ......
- public static final int start(final String processClass,
- final String niceName,
- int uid, int gid, int[] gids,
- int debugFlags,
- String[] zygoteArgs)
- {
- if (supportsProcesses()) {
- try {
- return startViaZygote(processClass, niceName, uid, gid, gids,
- debugFlags, zygoteArgs);
- } catch (ZygoteStartFailedEx ex) {
- ......
- }
- } else {
- ......
- return 0;
- }
- }
- ......
- }
這里的supportsProcesses函數(shù)返回值為true,它是一個Native函數(shù),實現(xiàn)在frameworks/base/core/jni/android_util_Process.cpp文件中:
- [cpp] view plaincopyjboolean android_os_Process_supportsProcesses(JNIEnv*
- env, jobject clazz)
- {
- return ProcessState::self()->supportsProcesses();
- }
- ProcessState::supportsProcesses函數(shù)定義在frameworks/base/libs/binder/ProcessState.cpp文件中:
- [cpp] view plaincopybool ProcessState::supportsProcesses() const
- {
- return mDriverFD >= 0;
- }
這里的mDriverFD是設(shè)備文件/dev/binder的打開描述符,如果成功打開了這個設(shè)備文件,那么它的值就會大于等于0,因此,它的返回值為true。
回到Process.start函數(shù)中,它調(diào)用startViaZygote函數(shù)進一步操作。