zygote 启动:app_main.cpp main()
设置process name为zygote,
AppRuntime->start(), 有可能为com.android.internal.os.ZygoteInit(开机为此case) 或者 RuntimeInit.
startVm(): 通过property等加载各项dalvik 参数并启动VM。
startReg():注册各项native jni, 如media/graphic/os/view/opengl/hardware/database/...
找到java 类并call对应类中的main方法,开机对应到ZygoteInit里的main();
ZygoteInit: main()
registerZygoteSocket(): 创建一个socket 接收zygote命令。
preload():加载classes, resources,opengl.
startSystemServer():
Zygote.forkSystemServer()
Zygote类是vm中native定义的类,
fork启动SystemServer
子进程进入handleSystemServerProcess() ----------->下面继续
runSelectLoop():父进程继续执行
while循环accept zygote server socket
有新的需求后,ZygoteConnection.runOnce
forkAndSpecialize();
子进程:handleChildProc()
invokeStaticMain()启动new request的main函数。
主要的实现方式是通过抛出异常,MethodAndArgsCaller,然后回到ZygoteInit: main()有catch到而继续执行,MethodAndArgsCaller.run。
父进程: handleParentProc():会做一些清理工作,如果需求继续处理,并不会remove当前request。
closeServerSocket():父进程close server socket
子进程进入handleSystemServerProcess:
RuntimeInit.zygoteInit()
RuntimeInit.applicationInit()
invokeStaticMain: SystemServer.main()
ServerThread()
:initAndLoop启动各个framework service: AMS/WMS/PMS/....
ActivityManagerService.main() 中AMS systemready时会启动launcher。
Launcher启动:
Launcher的intent-filter会有HOME标签。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
AMS.startRunning();
AMS.systemReady();
resumeTopActivitiesLocked();
resumeTopActivityLocked();
ActivityStackSupervisor.resumeHomeActivity();
AMS.startHomeActivityLocked(Home intent:category.HOME);
System_server启动参数。
String args[] = {
"--setuid=1000",
"--setgid=1000",
"--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1032,3001,3002,3003,3006,3007",
"--capabilities=" + capabilities + "," + capabilities,
"--runtime-init",
"--nice-name=system_server",
"com.android.server.SystemServer",
设置process name为zygote,
AppRuntime->start(), 有可能为com.android.internal.os.ZygoteInit(开机为此case) 或者 RuntimeInit.
startVm(): 通过property等加载各项dalvik 参数并启动VM。
startReg():注册各项native jni, 如media/graphic/os/view/opengl/hardware/database/...
找到java 类并call对应类中的main方法,开机对应到ZygoteInit里的main();
ZygoteInit: main()
registerZygoteSocket(): 创建一个socket 接收zygote命令。
preload():加载classes, resources,opengl.
startSystemServer():
Zygote.forkSystemServer()
Zygote类是vm中native定义的类,
fork启动SystemServer
子进程进入handleSystemServerProcess() ----------->下面继续
runSelectLoop():父进程继续执行
while循环accept zygote server socket
有新的需求后,ZygoteConnection.runOnce
forkAndSpecialize();
子进程:handleChildProc()
invokeStaticMain()启动new request的main函数。
主要的实现方式是通过抛出异常,MethodAndArgsCaller,然后回到ZygoteInit: main()有catch到而继续执行,MethodAndArgsCaller.run。
父进程: handleParentProc():会做一些清理工作,如果需求继续处理,并不会remove当前request。
closeServerSocket():父进程close server socket
子进程进入handleSystemServerProcess:
RuntimeInit.zygoteInit()
RuntimeInit.applicationInit()
invokeStaticMain: SystemServer.main()
ServerThread()
:initAndLoop启动各个framework service: AMS/WMS/PMS/....
ActivityManagerService.main() 中AMS systemready时会启动launcher。
Launcher启动:
Launcher的intent-filter会有HOME标签。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
AMS.startRunning();
AMS.systemReady();
resumeTopActivitiesLocked();
resumeTopActivityLocked();
ActivityStackSupervisor.resumeHomeActivity();
AMS.startHomeActivityLocked(Home intent:category.HOME);
System_server启动参数。
String args[] = {
"--setuid=1000",
"--setgid=1000",
"--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1032,3001,3002,3003,3006,3007",
"--capabilities=" + capabilities + "," + capabilities,
"--runtime-init",
"--nice-name=system_server",
"com.android.server.SystemServer",