Application应用层mysql
应用是用Java语言编写的运行在虚拟机上的程序,即图中最上层的蓝色部分.手机的上层应用其实,Google最开始时就在Android系统中捆绑了一些核心应用好比e-mail客户端、SMS短消息程序、日历、地图、浏览器、联系人管理程序,等等。sql
Application FrameWork应用框架层数据库
这一层便是编写Google发布的核心应用时所使用的API框架,开发人员一样可使用这些框架来开发本身的应用,这样便简化了程序开发的架构设计,可是必须遵照其框架的开发原则,组件以下:编程
丰富而又可扩展的视图(Views):能够用来构建应用程序,它包括列表(lists)、网格(grids)、文本框(text boxes)、按钮(buttons), 甚至可嵌入的Web浏览器。浏览器
内容提供器(Content Providers):它可让一个应用访问另外一个应用的数据(如联系人数据库),或共享它们本身的数据安全
资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串、图形、和布局文件(layout files)。服务器
通知管理器 (Notification Manager):应用能够在状态栏中显示自定义的提示信息。网络
活动管理器(Activity Manager):用来管理应用程序生命周期并提供经常使用的导航退回功能。架构
窗口管理器(Window Manager):管理全部的窗口程序。框架
包管理器(Package Manager):Android系统内的程序管理
电话管理器(Telephony Manager):主要提供Telephony相关信息的查询/修改功能,以及Phone状态监听功能,封装的方法主要是提供给APP上层使用。
定位管理器(Location Manager):获取经纬度及定位过程
在Android SDK中内置了一些对象,其中最重要的组件要属Activity、Intent、Services以及Content Providers四个组件。
Activity活动:一个活动就是一个用户界面。一个应用程序能够定义一个或多个活动,每一个活动都可以保存和恢复自身的状态。
Intent:Intent是描述一个特定活动的一种机制,好比“选取照片”、“拨打电话”等这类具体动做。在Android中,全部的东西都是经过Intents完成的,所以开发者有机会替代或重用大量的组件。好比有一个“发送邮件”的intent,当你应用程序须要发送邮件时能够激活这个intent。开发者甚至能够从新编写一个新的邮件应用程序,并注册为活动以处理这个intent代替标准的邮件应用程序。那么其余应用程序就可使用新编写应用程序来发送邮件了。
Services服务:一个服务Service就是运行在后台、没有用户直接交互的任务,与Unix daemon相似。好比要作一个音乐播放器,可能会被另外一个活动激活,但音乐是须要做为背景音乐播放,那么这种程序就能够考虑做为一种服务Service。而后别的活动能够来操做这个播放器。Android中内置了不少服务,能够方便的使用API进行访问。
ContentProviders内容提供者:一个内容提供者content Provider就是由自定义的API封装读写操做的一套数据。Content Provider是不一样应用程序之间共享全局数据最好的方式。好比,Google提供了联系人的Content Provider,包括姓名、地址、电话等全部信息在内的联系方式可以被全部应用程序使用。
Libraries系统运行库层
当咱们使用Android 应用框架时,Android系统会经过一些C/C++库来支持对咱们使用的各个组件,使其能更好地为开发者服务
Bionic系统 C 库:C语言标准库,系统最底层的库,C库经过Linux系统来调用。
多媒体库(MediaFrameword):Android系统多媒体库,基于 PacketVideo OpenCORE,该库支持多种经常使用的音频、视频格式的回放和录制以及一些图片,好比:MPEG四、MP三、AAC、AMR、JPG, PNG 等。
SurFace Manager:界面管理器
Media Framework:多媒体框架
SQLite:开源轻量级数据库,和mysql相似
SGL:2D图形引擎库。
SSL:位于TVP/IP协议与各类应用层协议之间,为数据通信提供支持。
OpenGL ES 1.0:3D效果的支持。
SQLite:关系数据库。
Webkit:Web浏览器引擎。
FreeType :位图(Bitmap)及矢量(Vector)。
Anndroid RunTim运行时
每一个Java程序都运行在Dalvik虚拟机之上。与PC同样,每一个Android应用程序都有本身的进程,Dalvik虚拟机只执行".dex"的可执行文件。当Java程序经过编译,最后还须要经过SDK中的 "dx"工具转化成".dex"格式才能正常地在虚拟机上执行。
图中黄色的部分则是Dalvik虚拟机
Google于2007年末正式发布了Android SDK, 做为 Android系统的重要特性,Dalvik虚拟机也第一次进入了人们的视野。它对内存的高效使用,以及在低速CPU上表现出的高性能,确实使人另眼相看。Android系统能够简单地完成进程隔离和线程管理。每个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。不少人认为Dalvik虚拟机是一个Java虚拟机,由于Android的编程语言偏偏就是Java语言。可是这种说法并不许确,由于Dalvik虚拟机并非按照Java虚拟机的规范来实现的,二者并不兼容;同时还要两个明显的不一样:Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式DEX(Dalvik Executable)的文件。在Java SE程序中的Java类会被编译成一个或者多个字节码文件(.class)而后打包到JAR文件,然后Java虚拟机会从相应的CLASS文件和JAR文件中获取相应的字节码;Android应用虽然也是使用Java语言进行编程,可是在编译成CLASS文件后,还会经过一个工具(dx)将应用全部的CLASS文件转换成一个DEX文件,然后Dalvik虚拟机会从其中读取指令和数据。
Dalvik虚拟机很是适合在移动终端上使用,相对于在桌面系统和服务器系统运行的虚拟机而言,它不须要很快的CPU速度和大量的内存空间。根据Google的测算,64M的RAM已经可以让系统正常运转了。其中24M被用于底层系统的初始化和启动,另外20M被用于高层启动高层服务。固然,随着系统服务的增多和应用功能的扩展,其所消耗的内存也势必愈来愈大。概括起来,Dalvik虚拟机有以下几个主要特征:
专有的DEX文件格式
DEX是Dalvik虚拟机专用的文件格式,而为何弃用已有的字节码文件(.CLASS文件)而采用新的格式呢?
(1) 一个应用中会定义不少类,编译完成后即会有不少相应的CLASS文件,CLASS文件中会有很多冗余的信息,而DEX文件格式会把全部的CLASS文件内容整合到一个文件中。这样,除了减小总体的文件尺寸和I/O操做,也提升了类的查找速度。
(2) 增长了新的操做码的支持。
(3) 文件结构尽可能简洁,使用等长的指令,借以提升解析速度。
(4) 尽可能扩大只读结构的大小,借以提升跨进程的数据共享。
DEX的优化
DEX文件的结构是紧凑的,可是若是咱们还想运行时的性能有进一步提升,咱们就仍然须要对DEX文件进行进一步优化。优化主要是针对如下几个方面:
(1) 调整全部字段的字节序(LITTLE_ENDIAN)和对齐结构中的每个域。
(2) 验证DEX文件中的全部类。
(3) 对一些特定的类进行优化,对方法里的操做码进行优化。
基于寄存器
相对于基于堆栈实现的虚拟机,基于寄存器实现的虚拟机虽然在硬件、通用性上要差一些,可是它在代码的执行效率上却更胜一筹。一个应用,一个虚拟机实例,一个进程
每个Android应用都运行在一个Dalvik虚拟机实例中,而每个虚拟机实例都是一个独立的进程空间。虚拟机的线程机制、内存分配和管理、Mutex等的实现都依赖底层操做系统。全部Android应用的线程都对应一个Linux线程,虚拟机于是能够更多地依赖操做系统的线程调度和管理机制。不一样的应用在不一样的进程空间里运行,加之对不一样来源的应用都使用不一样的Linux用户来运行,能够最大程度地保护应用的安全和独立运行。
Linux内核层
Android的核心系统服务基于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于Linux2.6内核。Linux内核同时也做为硬件和软件栈之间的抽象层,所有都是驱动.
Android更多的是须要一些与移动设备相关的驱动程序,主要的驱动以下所示。
显示驱动(Display Driver):基于Linux的帧缓冲(Frame Buffer)驱动。
键盘驱动(KeyBoard Driver):做为输入设备的键盘驱动。
Flash内存驱动(Flash Memory Driver):基于MTD的Flash驱动程序。
照相机驱动(Camera Driver):经常使用的基于Linux的v4l2(Video for Linux)驱动。
音频驱动(Audio Driver):经常使用的基于ALSA(Advanced Linux Sound Architecture)的高级Linux声音体系驱动。
蓝牙驱动(Bluetooth Driver):基于IEEE 802.15.1标准的无线传输技术。
WiFi驱动(Camera Drive):基于IEEE 802.11标准的驱动程序。
Binder IPC驱动:Android的一个特殊的驱动程序,具备单独的设备节点,提供进程间通信的功能。
Power Management(能源管理):好比电池电量等。
USB Driver(usb驱动)