• [5] Zygote


    Android设备中的两大进程,如下图




    1,由init进程创建的Daemon进程
    2,由 Zygote进程创建的应用程序进程

    什么是Zygote?
    zygote是“受精卵”的意思。在Android里,它是一个进程(java编写的)


    Zygote进程怎么创建?
    init进程启动完系统所需的各种daemon后,通过 app_process进程启动Zygote进程,如下图


    什么app_process进程?

    Zygote由java编写,不能直接由init进程启动,这时就要用到app_process进程。该进程先创建Dalvik虚拟机,再装载运行ZygoteInit类。如下图
    1,init进程通过init.rc启动app_process进程
    2,app_process进程创建Dalvik虚拟机
    3,装载运行ZygoteInit类
    4,ZygoteInit::main()函数绑定套接字,加载资源,启动SystemServer,处理新Android应用运行请求
    5,Zygote进程创建完毕



    Zygote作用?

    执行Android的应用程序,即apk。

    Tip:apk应用程序由java编写,不能以本地进程的形态运行在linux上,需运行在Dalvik虚拟机中。每个应用程序都运行在各自的虚拟机中,在linux里也表现为独立的进程。


    Zygote优点?

    运用类型于linux的fork克隆技术,缩短apk加载运行的时间。


    那么,在Linux中创建并运行一个进程,与在Android中通过Zygote来创建并运行一个进程,有何不同?
    在Linux中,新进程( 如B)是由父进程(如 A)通过fork()创建 A',子进程 A'再通过exec()将新进程B代码加载到内存,B运行。
    在Android中,所有的新App进程(如Application A),都是由zygote通过fork()创建zygote', Application A 的代码被动态复制到zygote'内的dalvik虚拟机上,而后zygote'把执行流程交给 Application A , Application A 开始运行。
    共同点:都用fork()创建
    不同点:android应用程序A并非通过fork()来重新装载已有进程的代码区,而是被动态加载到复制出的zygote' 内的Dalvik虚拟机上。

    下图是Linux创建运行新进程--流程图


    下图是Android创建运行新进程(应用程序)--流程图




    下图是Zygote如何运行新应用程序的流程图



  • 相关阅读:
    事件
    DOM中对象的获得
    C# 字符串 相关操作
    两个listbox 复制
    C#窗体控件简介ListBox
    store procedure
    view_baseInfo
    不走弯路,就是捷径
    inherit
    Excel 版本对应
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3265321.html
Copyright © 2020-2023  润新知