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

        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

      Zygote的main函数入口。
      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使用了Linux的fork机制。在Linux中Fork是很高效的。
      一个Android的应用实际上一个Linux进程,所谓进程具备下面几个要素,
      a.要有一段程序供该进程运行,程序是可以被多个进程共享的。
      b进程专用的系统堆栈空间。
      c.进程控制块,在linux中具体实现是task_struct
      d.有独立的存储空间。
      fork 创造的子进程复制了父亲进程的资源,包括内存的内容task_struct内容,在复制过程中,子进程复制了父进程的task_struct,系统堆栈空间和页面表,而当子进程改变了父进程的变量时候,会通过copy_on_write的手段为所涉及的页面建立一个新的副本。所以只有子进程有改变变量时,子进程才新建了一个页面复制原来页面的内容,基本资源的复制是必须的,整体看上去就像是父进程的独立存储空间也复制了一遍。
      再看看下面Google在讲解Dalvik虚拟机的图片,我们就大体有了Android系统中Actvitiy的实际映射状态有了基本的认识。

                          

  • 相关阅读:
    开源项目
    [Accessibility] Missing contentDescription attribute on image [可取行]失踪contentDescription属性图像
    Android 布局 中实现适应屏幕大小及组件滚动
    EF 错误记录
    EasyUI 加载时需要显示和隐藏 panel(面板)内容破版问题
    IE 报表缩放后页面破版
    VS 2017 引入nuget 问题
    SSRS 报表显示页面 asp net session丢失或者找不到 asp net session has expired or could not be found()
    log4net 配置
    网站
  • 原文地址:https://www.cnblogs.com/kingshow123/p/androidcore9.html
Copyright © 2011-2022 走看看