zoukankan      html  css  js  c++  java
  • 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进程。

  • 相关阅读:
    hdu 2222 Keywords Search
    Meet and Greet
    hdu 4673
    hdu 4768
    hdu 4747 Mex
    uva 1513 Movie collection
    uva 12299 RMQ with Shifts
    uva 11732 strcmp() Anyone?
    uva 1401
    hdu 1251 统计难题
  • 原文地址:https://www.cnblogs.com/naray/p/15209248.html
Copyright © 2011-2022 走看看