zoukankan      html  css  js  c++  java
  • Android核心分析 之九Zygote Service

    from : http://blog.csdn.net/maxleng/article/details/5508488

    Zygote Service

    在本章我们会接触到这两个单词:

    • Zygote [生物受精卵接合子接合体
    • Spawn:产卵

    通过这两个单词,我们就可以大体知道Zygote是干什么的了,就是叫老母鸡下蛋。通过“Zygote”产出不同的子“Zygote”。从大的架构上讲,Zygote是一个简单的典型C/S结构。其他进程作为一个客服端向Zygote发出”孵化”请求,Zygote接收到命令就“孵化”出一个Activity进程来。

    Zygote系统代码组成及其调用结构:

    • Zygote.java

    提供访问Dalvik “zygote”的接口。主要是包装Linux系统的Fork,以建立一个新的VM实例进程。

    • ZygoteConnection.java

    Zygote的套接口连接管理及其参数解析。其他Actvitiy建立进程请求是通过套接口发送命令参数给Zygote

    • ZygoteInit.java

    Zygotemain函数入口。

     

    Zygote系统代码层次调用

     

     

    main()

    startSystemServer()…

    runSelectLoopMode()

    Accept socket connection

    Conntecion.RunOnce()

    Read argument

    folkAndSpecialize

     

     

    folkAndSpecialize使用Native函数Dalvik_dalvik_system_Zygote_forkAndSpecialize

     

     

    //native 的获取

     dalvik/vm/native

     

    //dalvik_system_Zygote.c

      const DalvikNativeMethod dvm_dalvik_system_Zygote[] = {

        { "fork",            "()I",

            Dalvik_dalvik_system_Zygote_fork },

        { "forkAndSpecialize",            "(II[II[[I)I",

            Dalvik_dalvik_system_Zygote_forkAndSpecialize },

        { "forkSystemServer",            "(II[II[[I)I",

            Dalvik_dalvik_system_Zygote_forkSystemServer },

        { NULL, NULL, NULL },

    };

     

     

    在这里我们就有了Zygote服务的全貌理解,也在Code中印证了。【应yk_hu0621修正】{由于Android中没有具体应用程序的入口,都是通过启动Actvity来启动相关的Android应用,而这个 Android应用则对应着Linux进程,Activity便Host在这个应用程序上。}

     

    {原文:Activity在本质上是个什么东西,就是一个Linux进程}

     

    从分析中我们可以看到,Android使用了Linuxfork机制。在LinuxFork是很高效的。

     

    一个Android的应用实际上一个Linux进程,所谓进程具备下面几个要素,

     

     

    a.要有一段程序供该进程运行,程序是可以被多个进程共享的。

    b..进程专用的系统堆栈空间。

    c.进程控制块,在linux中具体实现是task_struct

    d.有独立的存储空间。

     

    fork 创造的子进程复制了父亲进程的资源,包括内存的内容task_struct内容,在复制过程中,子进程复制了父进程的task_struct,系统堆栈空间和页面表,而当子进程改变了父进程的变量时候,会通过copy_on_write的手段为所涉及的页面建立一个新的副本。所以只有子进程有改变变量时,子进程才新建了一个页面复制原来页面的内容,基本资源的复制是必须的,整体看上去就像是父进程的独立存储空间也复制了一遍。

     

    再看看下面Google在讲解Dalvik虚拟机的图片,我们就大体有了Android系统中Actvitiy的实际映射状态有了基本的认识。

     
     
  • 相关阅读:
    js中获取页面被卷去的高度等一些属性
    【转】js中cookie的使用详细分析
    2017-3-16 Tsql基础编程 存储过程 触发器 级联删除
    采用ajax请求返回得到json数据,取出具体项却为undefined
    读书笔记-你不知道的JavaScript(上) 【转自 http://muyunyun.cn/】
    AJAX 三级联动
    winform 打印控件
    winform 之MDI容器
    ajax完整版
    【2017-7-17】动软代码生成器 数据库连接 配置失败 解决方法
  • 原文地址:https://www.cnblogs.com/wanqieddy/p/2512896.html
Copyright © 2011-2022 走看看