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:dagger2让你爱不释手-重点概念讲解、融合篇
  2. android守护进程installd分析
  3. 查看android进程信息
  4. Android(安卓)O Treble框架
  5. Android系统启动之配置文件解析
  6. Android(安卓)模拟器 Atom-x86 cpu加速
  7. Android源码下载,亲测可用,解决了repo下载没有速度问题
  8. eclipse 创建android项目 无法启动
  9. setImageResource和setImageDrawable区别

随机推荐

  1. Google发布Android,Sun何去何从?
  2. 让你的代码量减少3倍!使用kotlin开发Andro
  3. 转android 模拟器中做端口重定向
  4. Android Activity& service&Broadcast re
  5. CTS概述
  6. 保护你的隐私,五种控制Android应用的权限
  7. Android中的智能指针
  8. Android(安卓)RIL的java框架
  9. Android中用seekbar控件控制歌曲的进度
  10. Android(安卓)so lib库远程http下载和动