Android      aosp启动流程7-java世界入口zygote   
文章目录  [隐藏]

参考:
https://segmentfault.com/a/1190000020526400             《Java 世界的盘古和女娲 —— Zygote》
https://zhuanlan.zhihu.com/p/494650195                《基于Android12 分析系统启动过程》
https://www.csdn.net/tags/MtzaggzsMzU4NTctYmxvZwO0O0OO0O0O.html 《Android Launcher启动过程》
https://juejin.cn/post/6873066972616065038              《浅谈 Zygote 和 SystemServer 》
https://article.itxueyuan.com/wZRbv                  《Android 8.1 源码_启动篇(二) -- 深入研究 zygote 》
https://www.jianshu.com/p/c1632e673e30                《zygote》
https://blog.csdn.net/zhaojigao/article/details/85614257      《Android 8.1 zygote创建新应用进程》
上文:
http://www.gaohaiyan.com/4073.html

上文梳理,frameworks/base/core/jni/AndroidRuntime.cpp中,
startVm、startReg构建了虚拟机JNIEnv* env;,
又用反射构将接收的参数className“com.android.internal.os.ZygoteInit”构造出一个java类startClass“com/android/internal/os/ZygoteInit”,
最终通过env->CallStaticVoidMethod(startClass, startMeth, strArray);启动这个java类。
然后,就到了本文。

1. ZygoteInit

在frameworks/base/core/java/com/android/internal/os/ZygoteInit.java约832行,是main函数。根据参数预加载资源文件;启动SystemServer,或者启动Zygote中的socket。


1.1. preload


1.2. forkSystemServer


1.3. handleSystemServerProcess


1.4. zygoteInit


2. ZygoteServer

在frameworks/base/core/java/com/android/internal/os/ZygoteServer.java,约172行。


2.1. runSelectLoop

创建一个进程,用于循环等待处理客户端发来的 socket 请求。


2.2. acceptCommandPeer

等待一个独立连接。


2.3. fillUsapPool

等待一个独立连接。


3. RuntimeInit

在frameworks/base/core/java/com/android/internal/os/RuntimeInit.java,约404行。


3.1. findStaticMain

等待一个独立连接。


3.2. MethodAndArgsCaller

等待一个独立连接。


4. Zygote.createManagedSocketFromInitSocket

在frameworks/base/core/java/com/android/internal/os/Zygote.java,约1013行。创建一个LocalServerSocket。


4.1. readArgumentList

读取socket的输入端/客户端的数据。


5. ZygoteConnection

在frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java,约83行。创建连接对象,内部初始化输入输出接口。


5.1. processOneCommand

获取脚本执行器。


6. LocalServerSocket

在frameworks/base/core/java/android/net/LocalServerSocket.java,约63行。创建一个LocalServerSocket对象。


7. LocalSocketImpl

在frameworks/base/core/java/android/net/LocalSocketImpl.java,约191行。创建一个LocalSocketImpl对象。监听地址、接收、发送消息。



- end

承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设