Android 是Google开发的基于Linux平台的开源手机操作系统,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行,这个系统发布后大大的方便了用户的需求。

每一个Android应用都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立的进程空间。虚拟机的线程机制,内存分配和管理。Mutex等等都是依赖底层操作系统而实现的。所有Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制。

不同的应用在不同的进程空间里运行,加之对不同来源的应用都使用不同的Linux用户来运行,可以最大程度的保护应用的安全和独立运行。Zygote是一个虚拟机进程,同时也是一个虚拟机实例的孵化器,每当系统要求执行一个Android应用程序,Zygote就会FORK出一个子进程来执行该应用程序。

这样做的好处显而易见:Zygote进程是在系统启动时产生的,它会完成虚拟机的初始化,库的加载,预置类库的加载和初始化等等操作,而在系统需要一个新的虚拟机实例时。Zygote通过复制自身,最快速的提供个系统。另外,对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域,大大节省了内存开销。

应用程序包(APK)被发布到手机上后,运行前会对其中的DEX文件进行优化,优化后的文件被保存到缓存区域(优化后的格式被称为DEY),虚拟机会直接执行该文件。如果应用包文件不发生变化,DEY文件不会被重新生成。

Android应用程序所使用的编程语言是Java语言,和Java SE一样,编译时使用Sun JDK将Java源程序编程成标准的Java字节码文件(.class文件)。而后通过工具软件DX把所有的字节码文件转成DEX文件(classes.dex)。

最后使用Android打包工具(aapt)将DEX文件,资源文件以及AndroidManifest.xml文件(二进制格式)组合成一个应用程序包(APK)。应用程序包可以被发布到手机上运行。



更多相关文章

  1. android开发初试(基于GUI的开发)
  2. Android(安卓)API Demo程序框架
  3. Android内核开发:浅析APK的安装过程
  4. 如何分析和研究Log文件(转)
  5. Android(安卓)屏幕适配问题
  6. ant build.xml 配置详解
  7. Android(安卓)ApiClound 自定义模块未绑定解决方案
  8. Kotlin For Android简介——有趣实用的功能
  9. 按下电源键到启动Home应用过程详解(一)

随机推荐

  1. Android(安卓)Relativelayout布局属性
  2. android触摸实现方式
  3. android弹出消息框
  4. Android(安卓)禁止转屏的方法
  5. Android(安卓)多个Module使用ButterKnife
  6. android traceview分析
  7. android之location01
  8. android 键盘显示与隐藏
  9. Android(安卓)Style.xml 详解
  10. 【Android】hwbinder的selinux配置