Pie_Zygote
2021-11-17 18:00:12 0 举报
Android 9.0(Pie)zygote调用流程
作者其他创作
大纲/内容
注册JNI函数
环境变量的设置与检测
poll()轮询监听AMS创建应用程序的请求
加载虚拟机库
启动虚拟机
pie\\frameworks\\base\\core\\java\\com\\android\\internal\\os\\ZygoteInit.java
准备main()函数形参
pie\\frameworks\\base\\cmds\\app_process\\app_main.cpp
init.zygote*.rc
1、AndroidRuntime初始化
2、argc、argv参数解析
return new MethodAndArgsCaller()
setpgid()
pie\\frameworks\\base\\core\\java\\com\\android\\internal\\os\\Zygote.java
fork子进程并通过反射机制找到SystemServer类的main()方法
startReg()
Zygote.createManagedSocketFromInitSocket()
pie\\frameworks\\base\\core\\jni\\AndroidRuntime.cpp
jni_invocation.Init()
禁止启动其他线程
类、资源等预加载
fork子进程
创建JavaVM
main()封装到Runnable
ZygoteConnection .processCommand()
Runnable r = forkSystemServer()
pie\\frameworks\\base\\core\\java\\com\\android\\internal\\os\\ZygoteConnection.java
r.run()
pie\\libcore\\dalvik\\src\\main\\java\\dalvik\\system\\ZygoteHooks.java
执行ZygoteInit.main()
gcAndFinalize()
反射机制运行SystemServer.java的main方法
getenv()、setenv()
准备工作
垃圾回收
子进程中运行上层目标应用程序
app_process
startVm()
preload()
3、runtime.start()
从环境变量中取得socket文件描述符,并创建LocalServerSocket
解析C/C++层传进来的参数argv
pie\\frameworks\\base\\core\\java\\com\\android\\internal\\os\\ZygoteServer.java
main()函数
准备String[] argv
new ZygoteServer()
caller.run()
设置相关日志追踪
Runnable caller = runSelectLoop()
0 条评论
下一页