• Android Zygote进程进阶


    1. Zygote进程作用是什么?

    • 启动SystemServer。
      • SystemServer启动后做了什么?
        • 创建Binder线程池。
        • 启动SystemServiceManager。
    • 孵化App进程。

    2. Zygote进程什么时候被启动?

      Android系统启动后第一个启动的进程就是Zygote进程。

      设备启动通过BootLoad加载Linux OS,启动Kernel,init进程是Linux os第一个进程,init进程通过读取init.rc配置文件,init进程启动子进程Zygote进程。

    3. Zygote进程启动后做了什么?

       Zygote在Native层:

    1. 启动Android虚拟机。
    2. 注册JNI函数。

      Zygote在Java层:

    1. 预加载系统资源。
    2. 启动SystemServer服务进程。
    3. 启动Socket Loop。

    Zygote流程步骤:

    • 启动Android虚拟机。
    • 注册JNI函数。
    • 预加载系统资源。
    • 启动SystemServer。
    • 启动Socket Loop。

    注意:Zygote进程与SystemServer进程IPC通信通过Socket完成,而非Binder进程。

    5. Zygote进程如何fork启动一个新应用进程

      Zygote进程通过复制自身方式创建一个新应用进程,由于Zygote进程启动时内部会创建一个虚拟机实例,因此,通过复制自身方式创建新应用进程时,新应用进程也会得到一个虚拟机实例拷贝。

    6. Fork进程需要注意哪些问题

      

    •  Fork子进程,在单线程完成,其它进程停止,不然,会出现不可预知的错误。
    • 父进程Fork一个子进程,在父进程中返回子进程PID,而在子进程中PID为0。
    • 子进程Kill后,会通过SIGCHLD信号通过父进程,子进程Killed,是否重启还是其它操作,看具体逻辑。

    在Android中Zygote子进程killed后,由init进程重新Fork Zyogte进程。

  • 相关阅读:
    initData()
    moveUp()
    moveLeft()
    moveDown()
    函数具体分析
    Linux命令学习笔记
    RocketMQ使用记录
    solr安装记录
    centos7下面ruby的升级
    centos7下面装fastdfs
  • 原文地址:https://www.cnblogs.com/naray/p/15209248.html
Copyright © 2020-2023  润新知