新聞中心
上文我們調(diào)用了Process.start函數(shù)開始為應(yīng)用程序創(chuàng)建新的進(jìn)程。

注意,它傳入一個(gè)***個(gè)參數(shù)為"Android.app.ActivityThread",這就是進(jìn)程初始化時(shí)要加載的Java類了,把這個(gè)類加載到進(jìn)程之后,就會把它里面的靜態(tài)成員函數(shù)main作為進(jìn)程的入口點(diǎn),后面我們會看到。
Step 2. Process.start
這個(gè)函數(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,它是一個(gè)Native函數(shù),實(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的打開描述符,如果成功打開了這個(gè)設(shè)備文件,那么它的值就會大于等于0,因此,它的返回值為true。
回到Process.start函數(shù)中,它調(diào)用startViaZygote函數(shù)進(jìn)一步操作。
本文名稱:Android應(yīng)用程序進(jìn)程啟動過程的源代碼分析(二)
網(wǎng)站路徑:http://www.dlmjj.cn/article/dphhhgh.html


咨詢
建站咨詢
