您的位置:首页 > 移动开发 > Android开发

Android应用程序启动过程

2015-07-19 08:59 447 查看
ActivityManagerService.startProcessLocked

Process is a tool to Manage the OS processes

Process.ProcessStartResult startResult = Process.start("android.app.ActivityThread",

app.processName, uid, uid, gids, debugFlags, mountExternal,

app.info.targetSdkVersion, null, null);

指定新进程入口函数为 android.app.ActivityThread 的静态函数main

Process.start---->startViaZygote

start的条件

// --runtime-init, --setuid=, --setgid=,

// and --setgroups= must go first

argsForZygote.add("--runtime-init");

argsForZygote.add("--setuid=" + uid);

argsForZygote.add("--setgid=" + gid);

if ((debugFlags & Zygote.DEBUG_ENABLE_JNI_LOGGING) != 0) {

argsForZygote.add("--enable-jni-logging");

}

if ((debugFlags & Zygote.DEBUG_ENABLE_SAFEMODE) != 0) {

argsForZygote.add("--enable-safemode");

}

if ((debugFlags & Zygote.DEBUG_ENABLE_DEBUGGER) != 0) {

argsForZygote.add("--enable-debugger");

}

if ((debugFlags & Zygote.DEBUG_ENABLE_CHECKJNI) != 0) {

argsForZygote.add("--enable-checkjni");

}

if ((debugFlags & Zygote.DEBUG_ENABLE_ASSERT) != 0) {

argsForZygote.add("--enable-assert");

}

if (mountExternal == Zygote.MOUNT_EXTERNAL_MULTIUSER) {

argsForZygote.add("--mount-external-multiuser");

} else if (mountExternal == Zygote.MOUNT_EXTERNAL_MULTIUSER_ALL) {

argsForZygote.add("--mount-external-multiuser-all");

}

argsForZygote.add("--target-sdk-version=" + targetSdkVersion);

启动一个Binder线程池。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: