Android简介
Android是一个基于Linux内核的开源手机操作系统,Android的系统构架主要包含四个部分,从下往上依次是:操作系统层:Linux内核 + 系统库和Android运行环境 + 应用程序框架 + 应用程序。
Android系统架构图

Android系统架构简介

  1. 操作系统层:Linux内核
    Android是基于Linux内核的,这是一个位于硬件和软件之间的抽象层,操作系统层主要包括了一些与移动设备相关的驱动程序,譬如说:音频驱动啊、蓝牙驱动啊等
  2. 系统库和Android运行环境
    1) 系统库主要包括了一些C、C++实现的库,这些库能被Android系统中不同的组件使用;2D和3D图像库;SQLite数据库。
    2) Android运行环境主要指的是Dalvik虚拟机。Dalvik虚拟机和一般Java虚拟机(Java VM)不同,它执行的不是Java标准的字节码(Bytecode),而是Dalvik可执行格式(.dex)中的执行文件。在执行的过程中,每一个应用程序即对应Linux中的一个进程。二者最大的区别在于,Java VM是基于栈的虚拟机,而Dalvik是基于寄存器的虚拟机。
  3. 应用程序框架
    Android的应用程序框架为应用程序层的开发者提供了API,开发人员主要是通过这个来是先自己的app的。譬如说应用程序员框架为我们提供了各种视图组件啊。ContentProvider组件啊。
    4、应用程序
    应用程序主要指的是Android为我们提供的一些核心应用,譬如说电话、短信、浏览器啊这些。

Dalvik虚拟机

什么是dalvik虚拟机
(类比于JVM)

  1. Dalvik虚拟机是专门用来执行Android应用程序的虚拟计算机,可以简单把Dalvik虚拟机理解成JVM的一个改进或者是升级。
  2. 既然是能够执行Android应用程序的虚拟计算机,它最基本的功能即:dalvik虚拟机有自己的一套完整的硬件框架,包括处理器啊,寄存器啊,存储器啊为Android应用程序的执行提供硬件环境;同时dalvik能够实现对android应用程序中对象的生命周期管理啊、垃圾回收管理啊,而且dalvik虚拟机的内核是基于Linux的,有更好的进程管理和内存管理。
  3. 既然dalvik又是JVM的一个改进,怎么理解呢,即dalvik与

dalvik与JVM的简单比较
JVM有如下不同和优势:
1、最大的不同是dalvik是基于寄存器的,而JVM是基于栈的
①、我们知道,寄存器的执行效率比内存栈的执行效率更接近处理器,因此dalvik执行程序的速度更快。
②、寄存器所占的控件比栈所占的空间小很多,因此可以做到一个Android应用程序对应于一个dalvik虚拟机实例,每一个dalvik虚拟机实例都是一个独立的进程,这就能够使得dalvik崩溃的时候不会影响其他应用程序的执行。
2、jvm执行的是二进制文件(class文件),而dalvik执行的是dex(dalivik excution)文件,dex文件又是对class文件的一个整合和优化,减少了class文件的冗余信息,一进步提高Android程序的执行效率。

dalvik与ART的简单比较

  1. 2014年11月1日,Google推出Android4.4版本KitKat,ART(Android Runing Time)虚拟机将替代Dalvik虚拟机。
  2. dalvik在每次运行Android应用程序的时候都要通过JIT(just-in-time)编译器将程序解释成硬件可执行的二进制代码,,这就是为什么搭载 Android 系统的手机相比 iPhone 来说耗电快,软件占内存大,卡顿严重。从而 Dalvik 被看作安卓运行效率低下的“毒瘤”。
  3. ART在第一次安装应用程序的时候就直接把Android应用和程序代码预编译成机器语言,这一机制叫 Ahead-Of-Time (AOT)编译,而不用运行的一次解释一次。
  4. 因此ART一般会:安装app时间长、要的存储空间也比较大、但是运行所需的内存小、耗电少、执行速度快,但兼容性差。

更多相关文章

  1. ANDROID的MANIFEST.XML文件字段解析
  2. Android启动过程深入解析
  3. Android(安卓)如何在屏幕切换的时候页面信息不被重置
  4. Android生命周期
  5. 在android上运行native可执行程序
  6. 用PHP编写Android应用程序
  7. 用VS2010开发Android应用的配置方法
  8. Android热点回顾第一期
  9. Android的进程,线程模型

随机推荐

  1. Google Android源代码结构
  2. Android读取/dev/graphics/fb0 屏幕截图
  3. android 上传json串时,json key 被替换为
  4. Android开发之多线程处理、Handler详解
  5. Android(安卓)Studio和SDK的下载安装以及
  6. Android(安卓)Jni调用浅述
  7. Android(安卓)调起本地qq,发起临时会话
  8. android 多屏幕适配 : 第一部分
  9. android 面试(一)
  10. Android--获取SHA1的坑