Android应用启动过程浅析
2013-01-08 17:21
239 查看
Android平台是为手持内嵌设备而设计的,并且大部分手持设备都使用电池工作,其本身拥有的资源非常有限。所以,手持设备要求内嵌系统平台必须提供一个高效的运行环境,一方面提高设备资源的利用率,另一方面尽可能地加长设备的使用时间。
Android手机用户与设备的交互无非总结为:打开应用以及切换到下一个应用;为了能有效的减少系统负担,Android在启动新进程(打开新应用)采用了Zygote(孵化)进程。
Init进程是系统启动后运行在用户空间的首个进程,init进程启动完系统运行所需要的各种守护进程后,启动Zygote进程;Zygote进程启动后,Android的服务与应用程序都有该进程启动运行。下面是一个模拟器的进程启动情况,zygote的进程号是33,它的父进程号是1(init进程);下面的应用的父进程号都是33,说明所有的应用都是由zygote进程生成的。
谷歌在发布Android平台描述平台特性时讲到:Zygote是Android系统的一个主要特征,通过COW(copy on write)方式对运行在内存中的进程实现了最大程度的服用,并通过库共享有效降低了内存的使用量。
下面来对Zygote进程孵化新进程的过程做进一步了解:Zygote进程调用fork()函数创建出Zygote' 子进程,子进程Zygote' 共享父进程Zygote的代码区与连接信息。如下图所示,Fork()橙色箭头左边是Zygote进程,右边是创建出的Zygote‘子进程;然后Zygote’ 子进程将执行流程交给应用程序A,Android程序开始运行。新生成的应用程序A会使用已有Zygote父进程的库与资源的连接信息,所以运行速度很快。
另外,对于上图,Zygote启动后,初始并运行DVM,而后将需要的类与资源加载到内存中。随后调用fork()创建出Zygote' 子进程,接着子进程动态加载并运行应用程序A。运行的应用程序A会使用Zygote已经初始化并启动运行的DVM代码,通过使用已加载至内存中的类与资源来加快运行速度。
以上只是一个抽象的流程,没有具体到代码层的实现,大家如果想分析这部分源代码的话,给大家推荐《Android框架揭秘》这本书。
参考资料:《Android框架揭秘》
Android手机用户与设备的交互无非总结为:打开应用以及切换到下一个应用;为了能有效的减少系统负担,Android在启动新进程(打开新应用)采用了Zygote(孵化)进程。
Init进程是系统启动后运行在用户空间的首个进程,init进程启动完系统运行所需要的各种守护进程后,启动Zygote进程;Zygote进程启动后,Android的服务与应用程序都有该进程启动运行。下面是一个模拟器的进程启动情况,zygote的进程号是33,它的父进程号是1(init进程);下面的应用的父进程号都是33,说明所有的应用都是由zygote进程生成的。
谷歌在发布Android平台描述平台特性时讲到:Zygote是Android系统的一个主要特征,通过COW(copy on write)方式对运行在内存中的进程实现了最大程度的服用,并通过库共享有效降低了内存的使用量。
下面来对Zygote进程孵化新进程的过程做进一步了解:Zygote进程调用fork()函数创建出Zygote' 子进程,子进程Zygote' 共享父进程Zygote的代码区与连接信息。如下图所示,Fork()橙色箭头左边是Zygote进程,右边是创建出的Zygote‘子进程;然后Zygote’ 子进程将执行流程交给应用程序A,Android程序开始运行。新生成的应用程序A会使用已有Zygote父进程的库与资源的连接信息,所以运行速度很快。
另外,对于上图,Zygote启动后,初始并运行DVM,而后将需要的类与资源加载到内存中。随后调用fork()创建出Zygote' 子进程,接着子进程动态加载并运行应用程序A。运行的应用程序A会使用Zygote已经初始化并启动运行的DVM代码,通过使用已加载至内存中的类与资源来加快运行速度。
以上只是一个抽象的流程,没有具体到代码层的实现,大家如果想分析这部分源代码的话,给大家推荐《Android框架揭秘》这本书。
参考资料:《Android框架揭秘》
相关文章推荐
- Android应用启动过程浅析
- Android系统应用层App启动过程分析
- 利用Android与iOS系统进行移动应用开发:浅析开发过程及人员招募
- Android 系统启动时 PackageManagerService 对应用组件信息表的构建过程
- android学习--Activity及应用启动过程
- (大总结)从寻找fragment静态导入activity总是失败的解决方法中了解android应用的系统启动过程
- Android成长之路之应用启动过程
- Android底层启动过程(应该说是应用进程init启动后的一些步骤)
- Android 应用的安装与启动过程(学习笔记)
- 浅析Android系统中的Activity启动过程
- Android应用启动过程
- android启动过程之init.rc文件浅析
- cocos2d-x_Android应用启动调用过程简析
- 第15章 Android启动过程 [Android应用开发与系统改造实战]
- Android-应用启动过程
- 项目清单文件分析与第一个ANDROID应用的启动过程
- Android 8.0系统源码分析--应用进程启动过程分析
- Android 插件化开发——应用的启动过程源码解析(简单清晰)
- android学习笔记–android启动过程之init.rc文件浅析
- 【Android源码学习】应用启动过程