1.4 Zygote启动流程

less than 1 minute read

启动流程

  1. 解析init.zygote.rc中的参数, 创建AppRuntime并调用AppRuntime#start方法
  2. 调用AndroidRuntime的startVM()方法创建虚拟机, 再调用startReg注册JNI函数
  3. 通过JNI方式调用ZygoteInit#main(), 第一次进入Java世界
  4. registerZygoteSocket()建立socket通道, zygote作为通信的服务端, 响应客户端请求
  5. preload()预加载通用类, drawable和color资源, OpenGL, 共享库以及WebView, 用于提升app启动效率
  6. zygote完毕大部分工作, 接下来再通过startSystemServer(), fork得力帮手system_server进程, 也是上层framework的运行载体
  7. zygote功成身退, 调用runSelectLoop(),等待创建进程请求