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

123.jpg (18.36 KB, 下载次数: 0)

下载附件  保存到相册

2012-3-19 11:35 上传

 

  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的实际映射状态有了基本的认识。

Android核心分析 之九Zygote Service的更多相关文章

  1. Android 核心分析 之七Service深入分析

    Service深入分析 上一章我们分析了Android IPC架构,知道了Android服务构建的一些基本理念和原理,本章我们将深入分析Android的服务.Android体系架构中三种意义上服务: ...

  2. Android 核心分析 之八Android 启动过程详解

    Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...

  3. Android 核心分析 之五基本空间划分

    基本空间划分 Google给了我们一张系统架构图,在这张图上我们可以看到Android的大体框架组成.                   11.jpg (175.6 KB, 下载次数: 0) 下载附 ...

  4. Android 核心分析 之六 IPC框架分析 Binder,Service,Service manager

    IPC框架分析 Binder,Service,Service manager 我首先从宏观的角度观察Binder,Service,Service Manager,并阐述各自的概念.从Linux的概念空 ...

  5. Android核心分析之十九电话系统之GSMCallTacker

    GSMCallTracker在本质上是一个Handler.<IGNORE_JS_OP> 1.jpg (1.52 KB, 下载次数: 1) 下载附件  保存到相册 2012-3-22 11: ...

  6. Android核心分析之二十二Android应用框架之Activity

    3 Activity设计框架 3.1 外特性空间的Activity    我们先来看看,android应用开发人员接触的外特性空间中的Activity,对于AMS来讲,这个Activity就是客服端的 ...

  7. Android核心分析之二十一Android应用框架之AndroidApplication

    Android Application Android提供给开发程序员的概念空间中Application只是一个松散的表征概念,没有多少实质上的表征.在Android实际空间中看不到实际意义上的应用程 ...

  8. Android核心分析之十六Android电话系统-概述篇

    Android电话系统之概述篇 首先抛开Android的一切概念来研究一下电话系统的最基本的描述.我们的手机首先用来打电话的,随后是需要一个电话本,随后是PIM,随后是网络应用,随后是云计算,随后是想 ...

  9. Android 核心分析之十三Android GWES之Android窗口管理

    Android GWES之Android窗口管理1基本构架原理 Android的窗口管理是C/S模式的.Android中的Window是表示Top Level等顶级窗口的概念.DecorView是Wi ...

随机推荐

  1. Jquery 1.8.2 click function - 动态

    Jquery 动态按钮方法如下:   $("#parentID").on("click",'.classname',function(){$(this).par ...

  2. Altera USB Blaster 仿真器(EPM240仿制版

    转载:http://tigerwang202.blogbus.com/logs/35981280.html 其他很好的资料:http://bbs.ednchina.com/BLOG_ARTICLE_1 ...

  3. 在Eclipse中制作SSH配置文件提示插件

    原文地址:http://blog.csdn.net/longyuhome/article/details/8968093 这篇博客算是对原先的“在Eclipse中制作和使用struts2配置文件提示插 ...

  4. python-操作mssql数据库

    准备工作: cmd 命令行下安装pymssql: pip install pymssql 查询的数据库如下: 代码如下: #coding=utf-8 import pymssql class MSSQ ...

  5. SL410K 在Ubuntu禁用触摸板

    由于之前把系统自带的恢复去了,然后TouchPad一直不能禁用,而后我的410k就只装上ubuntu,想不到在ubuntu上,禁用/启用 触摸板这么方便. http://askubuntu.com/q ...

  6. Vim配置文件(Vimrc)

    嘛……后面的比赛基本都是在NOI Linux下进行了,windows下的开发环境基本都不能用了>_>果断转了vim,记录一下vim的配置文件- set nu syntax on filet ...

  7. 运用socket实现简单的服务器客户端交互

    Socket解释: 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. Socket的英文原义是“孔”或“插座”.作为BSD UNIX的进程通信机制,取后一种意 ...

  8. Visual Studio快捷键设置

    1.查看当前快捷键:环境-键盘-按快捷键2.文本编辑器-C#-显示-行号3.文本编辑器-C#-制表符-插入空格4.文本编辑器-所有语言-没有选定内容时对空行应用剪切或复制命令5.Ctrl+Shift- ...

  9. Poj 1032 分类: Translation Mode 2014-04-04 09:09 111人阅读 评论(0) 收藏

    Parliament Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16521   Accepted: 6975 Descr ...

  10. jQuery新的事件绑定机制on()

    浏览jQuery的deprecated列表,发现live()和die()在里面了,赶紧看了一下,发现从jQuery1.7开始,jQuery引入了全新的事件绑定机制,on()和off()两个函数统一处理 ...