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如何运行新应用程序的流程图

[5] Zygote的更多相关文章

  1. Android源码阅读 – Zygote

    @Dlive 本文档: 使用的Android源码版本为:Android-4.4.3_r1 kitkat (源码下载: http://source.android.com/source/index.ht ...

  2. Android5.1.1源码 - zygote fork出的子进程如何权限降级

    前言 所有Android应用进程都是zygote fork出来的,新fork出来的应用进程还保持着root权限,这显然是不被允许的,所以这个fork出来的子进程的权限需要被降级,本文说的就是Andro ...

  3. 系统进程 zygote(一)—— 概述

    和蔼的春光,充满鸳鸯的池塘:快辞别寂寞的梦乡,来和我摸一会鱼儿,折一枝海棠.—— 徐志摩·醒!醒! ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 先看一张 ...

  4. 系统进程 zygote(二)—— zygote.rc 脚本

    夕阳已在沉沉的淡化,这黄昏的美,有谁能描画?莽莽的天涯,哪里是我的家,哪里是我的家?爱人呀,我这般的想着你,你那里可也有丝毫的牵挂?—— 徐志摩·海边的梦 ilocker:关注 Android 安全( ...

  5. 系统进程 zygote(三)—— app_process 的 main 函数

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 首先: , , , ) < ) { // Older kernels don't understand ...

  6. Zygote浅谈

    Zygote是什么 操作系统中,进程实际上是文件到地址空间的映射像.进程将要运行时,由操作系统将其映射到地址空间,完成这项工作的事物本质也应是一个进程,我们称这个进程为孵化进程,那么这个进程怎么收到消 ...

  7. Zygote进程【3】——SystemServer的诞生

    在ZygoteInit的main()方法中做了几件大事,其中一件便是启动Systemserver进程,代码如下: @/frameworks/base/core/Java/com/Android/int ...

  8. Zygote进程【2】——Zygote的分裂

    在Zygote的诞生一文中init进程是如何一步步创建Zygote进程的,也了解了Zygote的进程的作用.Zygote进程的诞生对于整个Java世界可以说有着"开天辟地"的作用, ...

  9. Zygote进程【1】——Zygote的诞生

    在Android中存在着C和Java两个完全不同的世界,前者直接建立在Linux的基础上,后者直接建立在JVM的基础上.zygote的中文名字为"受精卵",这个名字很好的诠释了zy ...

  10. 图解Android - Zygote, System Server 启动分析

    Init 是所有Linux程序的起点,而Zygote于Android,正如它的英文意思,是所有java程序的'孵化池'(玩过星际虫族的兄弟都晓得的).用ps 输出可以看到 >adb shell ...

随机推荐

  1. 1320. Graph Decomposition

    1320 简单并查集 #include <iostream> #include<cstdio> #include<cstring> #include<algo ...

  2. 2014年百度之星程序设计大赛 - 初赛(第一轮) hdu Grids (卡特兰数 大数除法取余 扩展gcd)

    题目链接 分析:打表以后就能发现时卡特兰数, 但是有除法取余. f[i] = f[i-1]*(4*i - 2)/(i+1); 看了一下网上的题解,照着题解写了下面的代码,不过还是不明白,为什么用扩展g ...

  3. 宏HASH_GET_NEXT

    /*******************************************************************//** Gets the next struct in a h ...

  4. tomcat部署两个相同的项目报错不能访问

    需要在同一个tomcat上搭建一个项目的两个版本,都要能跑起来   直接复制两个项目部署,会出现两个错误: 1,webAppKey 冲突 2,tomcat启动会有内存溢出(OutOfMemoryErr ...

  5. NSAutoReleasePool

    做iPhone应用开发已经2年多了, 但一些基础的概念性问题只是大致了解, 脑袋中有个模糊的概念. 虽然对平时工作开发没什么影响, 不过时间长了, 心里总是有点虚. 所以从现在开始, 每当我遇到一个模 ...

  6. js 写成类的形式 js 静态变量 js方法 属性 json类

    function ClassStudentList() { //[{"Cid":"0d","Students":[{"Sid&qu ...

  7. VS2008+ffmpeg SDK3.2调试tutorial01

    最近研究ffmpeg,在ubuntu下感觉不太好调试,老是找不到函数的声明.所以我就把他移到windows下用vs2008分析 关于环境的搭建,我参考了 http://hi.baidu.com/for ...

  8. <一>SQL优化1-4

    第一条:去除在谓词列上编写的任何标量函数        --->在select 显示列上使用标量函数是可以的.但在where语句后的过滤条件部分对列使用函数,需要考虑.因为执行sql的引擎会因为 ...

  9. 多线程程序设计学习(3)immutable pattern模式

    Immutable pattern[坚不可摧模式] 一:immutable pattern的参与者--->immutable(不变的)参与者        1.1:immutable参与者是一个 ...

  10. 【转】win7(windows7)下java环境变量配置方法

    原文网址:http://jingyan.baidu.com/article/925f8cb836b26ac0dde0569e.html win7(windows7)下java环境变量配置方法,java ...