新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android應(yīng)用程序進(jìn)程啟動過程的源代碼分析(二)
上文我們調(diào)用了Process.start函數(shù)開始為應(yīng)用程序創(chuàng)建新的進(jìn)程。

注意,它傳入一個***個參數(shù)為"Android.app.ActivityThread",這就是進(jìn)程初始化時要加載的Java類了,把這個類加載到進(jìn)程之后,就會把它里面的靜態(tài)成員函數(shù)main作為進(jìn)程的入口點(diǎn),后面我們會看到。
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ù),實(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ù)進(jìn)一步操作。
網(wǎng)站名稱:Android應(yīng)用程序進(jìn)程啟動過程的源代碼分析(二)
標(biāo)題來源:http://m.fisionsoft.com.cn/article/dphhhgh.html


咨詢
建站咨詢
