Android應用程序進程啟動過程的源代碼分析(二)
上文我們調用了Process.start函數開始為應用程序創建新的進程。
注意,它傳入一個***個參數為"android.app.ActivityThread",這就是進程初始化時要加載的Java類了,把這個類加載到進程之后,就會把它里面的靜態成員函數main作為進程的入口點,后面我們會看到。
Step 2. Process.start
這個函數定義在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函數返回值為true,它是一個Native函數,實現在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函數定義在frameworks/base/libs/binder/ProcessState.cpp文件中:
- [cpp] view plaincopybool ProcessState::supportsProcesses() const
- {
- return mDriverFD >= 0;
- }
這里的mDriverFD是設備文件/dev/binder的打開描述符,如果成功打開了這個設備文件,那么它的值就會大于等于0,因此,它的返回值為true。
回到Process.start函數中,它調用startViaZygote函數進一步操作。