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



更多相关文章

  1. Android(安卓)平台软件兼容性问题凸显
  2. 第一天Android校内实习笔记--回顾
  3. Android(安卓)表格布局的RadioButton
  4. Android数据保存之文件保存
  5. Kotlin语言概述2
  6. Android系统启动之Zygote
  7. 修改应用程序图标和应用程序标题
  8. Android内存泄漏检测工具大全
  9. Android之ContentProvider源码解析

随机推荐

  1. php 与 nginx 的两种处理方式
  2. PHP运算符知识点整理
  3. php检测字符串是否包含字符串
  4. PHP 实现常用数据结构之链表
  5. php判断数组某个值是否存在
  6. php生成一个不重复的会员号
  7. tideways+toolkit对php代码进行性能分析
  8. php+nodeJs+thrift协议,实现zookeeper节点
  9. PHP写时复制(Copy On Write)
  10. PHP中的闭包