上文我们调用了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函数进一步操作。
                当前名称:Android应用程序进程启动过程的源代码分析(二)
                
                新闻来源:http://www.csdahua.cn/qtweb/news45/365095.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网