Android开机流程


Zygote进程

在init.rc中有

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server

zygote进程通过init进程启动,zygote进程就奠定了Android的基础。

从zygote的main()开始,见/frameworks/base/cmds/app_process/app_main.cpp

int main(int argc, const char * const argv[])
{
 ......
 if(0 == strcmp("--zygote", arg)){
  ......
  runtime.start("com.android.internel.os.ZygoteInit",
   startSystemServer);
 ......
}

接下来运行/frameworks/base/core/jni/AndroidRuntime.cpp的start()
void AndroidRuntime::start(const char * className, const bool startSystemServer)
{
 ......
 classNameStr = env->NewStringUTF(className);
 ......
 startMeth = env->GetStaticMethodID(startClass, "main",
         "([Ljava/lang/String;)V");
 ......
}
因此运行/frameworks/base/java/com/android/internal/os/ZygoteInit.java的main().
public static void main(String argv[]){
 ......
 registerZygoteSocket();
 preloadClasses();
 if(argc[1].equals("true")){
  startSystemServer();
 }
 ......

}

  • 1
  • 2
  • 3
  • 下一页

相关内容