Android 体系结构:
Android系统采用分层架构,由高到低分为4层,依次是应用程序层(Applications)、应用程序框架层(Application Framework)、核心类库(Libraries)和Linux内核(Linux Kernel)。
应用程序层
应用程序层是一个核心应用程序的集合,所有安装在手机上的应用程序都属于这一层,例如自带的联系人程序、短信程序,或者从Google Play上下载的小游戏等都属于应用程序层。
应用程序框架层
应用程序框架层主要提供了构建应用程序时用到的各种API。Android自带的一些核心应用就是使用这些API完成的,例如视图(Views)、活动管理器(Activity Manager)、通知管理器(Notification Manager)等。开发者也可以通过这些API来构建自己的应用程序。
核心类库
核心类库中包含了系统库及Android运行环境。系统库这一层主要是通过C/C++库来为Android系统提供主要的特性支持,如OpenGL / EL库提供了 3D 绘图的支持,Webkit库提供了浏览器内核的支持。
Android 运行时库(Android Runtime )主要提供了一些核心库,能够允许开发者使用Java语言来编写 Android 应 用 ,另外Android运行时库中还包括了Dalvik虚拟机.它使得每一个Android应用都能运行在独立的进程当中,并且拥有一个自己的Dalvik虚拟机实例。相较于Java城拟机,Dalvik是专门为移动设备定制的,它针对手机内存、CPU性能等做了优化处理。
Linux内核
Android系统主要基「 Linux内核开发,Linux内核层为Android设备的各种硬件提供「底层的驱动,如显示驱动、音频驱动、照相机驱动、蓝牙驱动、电源管理驱动等。
Dalvik 虚拟机
在Android运行时库中包括了 Dalvik虚拟机。Dalvik是Google
公司自已设计的用于Android平台的虚拟机,它可以简单地完成进程隔离和线程管理 ,并且 可以提高内存的使用效率,每一个Android应用程序在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解析下得以执行。
很多人都认为Dalvik虚拟机是一个Java虚拟机 .因为Android开发的编程语言恰恰是
Java语言 .但是这种说法并不准确Dalvik虚拟机并不是按照Java虚拟机的规范来实现的 . 两者不兼容,而且也有很多不同之处下面通过一个图进行对比说明。
Java虚拟机和Dalvik虚拟机主要有两大区别:一是它们编译后的文件不同;二是它们基于的架构不同。具体如下:
1.编译后的文件不同
Java虚拟机运行的是.class字节码文件,而Dalvik虚拟机运行的则是其专有的.dex文件。
在Java程序中Java类会被翻译成一个或者多个字节码文件 (.class )然后打包到.jar文件,之后Java虚拟机会从相应的.class文件和.jar文件中获取相应的字节码。Android程序虽然也是使用Java语言进行编程,但是在翻译成.class文件后,还会通过工具将所有的.class文件转换成一个.dex文件,然后Dalvik虚拟机从其中读取指令和数据,最后的.odex是为了在运行过程中进一步提高性能面对.dex文件进行的进一步优化,能加快软件的加载速度和开启速度。
基于的架构不同
Java虚拟机是基于栈的架构,栈是一个连续的内存空间,取出和存入的速度比较慢;而Dalvik是基于寄存器的架构,寄存器是CPU上的一块缓存,寄存器的存取速度要比从内存中存取的速度快很多,这样就可以根据硬件最大限度地优化设备,更适合移动设备的使用。
Android系统下的Dalvik虚拟机默认给每一个应用程序最多分配16MB内存,如果Android加载的资源超过这个值,就会报出OutOfMemoryError异常,因此一定要注意这个问题。
ART模式
ART模式英文全称为Android Runtime,是谷歌Android 4.4 系统新增的一种应用运行模式。与传统的Dalvik模式不同,ART模式可以实现更为流畅的安卓系统体验。
ART模式与Dalvik模式最大的不同在于,在启用ART模式后,系统在安装应用的时候会进行一次预编译,在安装应用程序时会先将代码转换为机器语言存储在本地,这样在运行程序时就不会每次都进行一次编译了,执行效率也大大提升。