• 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 [可选参数] 命令所在路径 启动的类名 [可选参数]
    

     

  • 相关阅读:
    C#微信公众号开发 -- (一)开发之前的准备
    C#微信公众号学习
    微信模板消息发送帮助类
    Java平台调用.net开发的WebService报错处理
    sql语句单据编号生成防并发
    [转]实用教程:搭建FTP服务器以实现局域网飞速传输文件
    C# Post Json数据到对方url
    sql语句优化技巧
    Html添加百度地图
    查看CentOS版本
  • 原文地址:https://www.cnblogs.com/krislight1105/p/10144570.html
Copyright © 2020-2023  润新知