Android进程创建与执行:从Zygote到Dalvik VM

需积分: 9 0 下载量 103 浏览量 更新于2024-08-25 收藏 4.13MB PPT 举报
本文主要探讨了Java程序在Android系统中的进程创建与执行流程,以及Android系统的架构和关键组件。文章作者以广州网易的闻波为背景,分享了关于Android开发的专业见解,包括系统启动、应用运行机制以及Android的特色技术。 在Android系统中,Java程序的进程创建始于向Zygote服务器发送请求。这个过程在`Process.java`的`zygoteSendArgsAndGetPid()`函数中触发。Zygote服务器接收到请求后,会在`ZygoteConnection.java`的`runOnce()`函数中通过`Zygote.forkAndSpecialize()`方法创建一个新的子进程。这一过程类似于JVM,Dalvik虚拟机将主类的`main`方法作为程序的入口点。`RuntimeInit.zygoteInit()`函数调用`invokeStaticMain()`,根据传入的类名加载并执行相应的`main`方法,从而启动用户Java程序。 Android系统架构分为五层:Application、Framework、Native Libraries、User Space Drivers和Linux Kernel。其中,Application层包含了Android内置程序和第三方应用;Framework层由Android核心代码和供应商扩展组成;Native Libraries层提供了C/C++库和各种服务,如SQLite、OpenGL/ES等;User Space Drivers负责驱动管理;Linux Kernel则提供了基础操作系统功能。 Android有其独特的特性,如硬件抽象层(HAL),允许许多驱动程序在用户态运行;Bionic是定制的C/C++运行时库,因版权问题避免了使用uCLib;SurfaceFlinger是负责图形渲染的服务,有待进一步优化;内置的Webkit浏览器不支持插件且与Chrome不同,但随着版本升级,逐渐增加了HTML5特性。此外,Dalvik虚拟机是为移动设备设计的轻量级虚拟机,通过Zygote进程 fork 方式快速启动应用程序,以绕过Sun公司的授权限制。 系统启动过程中,涉及了多个阶段,从Initial Program Loader到Second Program Loader,再到Linux内核加载和初始化,以及各个分区镜像文件如hboot.img和radio.img的加载。整个启动流程涉及到SPL、Linux内核以及init等多个组件。 Android系统的复杂性和独特设计使其在移动设备上运行高效,而Java程序的执行机制则是通过与Zygote服务器的交互来实现,确保了应用的快速启动和高效运行。