启动 Zygote
-Xzygote /system/bin --zygote--start-system-server
AndroidRuntime->AppRuntime
int main(int argc,const char* constargv[])
{
}
其中AndroidRuntime.Start("com.android.internal.os.ZygoteInit",startSystemServer);
呼叫Android::Start(constchar* className,const bool startSystemServer)
/framework/base/core/jni/AndroidRuntime.cpp
该函数的处理内容:
1.处理Jave VirtualMachine的一些参数选项;
2.创建DalvikJava虚拟机,JNI_CreateJavaVM(&mJavaVM,&env,&initArgs);
3.注册AndroidRuntime中的JNI接口给虚拟机;
4.呼叫Java类com.android.internal.os.ZygoteInit的main函数
在类com.android.internal.os.ZygoteInit的main函数中,
1.注册Zygotesocket用来接收请求;
2.加载preloadedclass、resources用来加快启动速度,文件清单在framework.jar中的preloaded-classes,framework-res.apk中的res中;
3.启动System Server;
4.RuntimeInit.ZygoteInit函数会呼叫com.android.server.SystemServer类的main函数。
5.在init2函数中,android创建了serverthread,在该thread中android开始注册各种service到servicemanager中
包括EntropyService,PowerManager,ActivityManager,Telephony,PackageManager,ContentManager,ContentProvider,
BatteryService,HardwareService,AlarmManager等等。
至此android systemserver启动完成。