zoukankan      html  css  js  c++  java
  • Zygote总结

    Zygote是由init进程通过解析 init.zygote.rc 文件而创建的,zygote所对应的可执行程序 app_process,所对应的源文件是App_main.cpp,进程名为zygote。

    Zygote重启的情况(四种)

    • servicemanager进程被杀; (onresart)
    • surfaceflinger进程被杀; (onresart)
    • Zygote进程自己被杀; (oneshot=false)
    • system_server进程被杀; (waitpid)

    从App_main()开始,Zygote启动过程的函数调用类大致流程如下:

    Zygote采用高效的I/O多路复用机制,保证在没有客户端连接请求或数据处理时休眠,否则响应客户端的请求。

    时序图如下:

        整个Zygote调用流程总结

    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(),随时待命,当接收到请求创建新进程请求时立即唤醒并执行相应工作。

    通过cmd命令,来fork新进程来执行类中main方法的方式:(启动后进入RuntimeInit.main)

     app_process [可选参数] 命令所在路径 启动的类名 [可选参数]
    

     

  • 相关阅读:
    [bzoj3999] [TJOI2015]旅游
    [bzoj3143] [HNOI2013]游走
    [bzoj3140] [Hnoi2013]消毒
    [bzoj3142] [HNOI2013]数列
    [bzoj4860] [BeiJing2017]树的难题
    [bzoj2599] [IOI2011]Race
    [bzoj1558] [JSOI2009]等差数列
    [bzoj3626] [LNOI2014]LCA
    [bzoj4011] [HNOI2015]落忆枫音
    JQuery
  • 原文地址:https://www.cnblogs.com/krislight1105/p/10144570.html
Copyright © 2011-2022 走看看