Android开发之Android系统架构

       Android的系统架构采用了分层架构的思想,如图所示。

       从上层到底层共包括四层,分别是应用程序程序层、应用框架层、系统库和Android运行时和Linux内核。


Android系统架构图

       每层功能简要介绍如下:

       一、 应用程序层  

       该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用Java语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等、友好共处。

       

       二、 应用程序框架层

       该层是Android应用开发的基础,开发人员大部分情况是在和她打交道。应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在Android平台上,开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其 它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。

       隐藏在每个应用后面的是一系列的服务和系统, 其中包括;

       Views System:丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。

       Content Providers(内容提供器):使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。

       Resource Manager(资源管理器):提供非代码资源的访问,如本地字符串,图形,和布局文件( layout files )

       Notification Manager(通知管理器):使得应用程序可以在状态栏中显示自定义的提示信息。。通知列设定在手机的顶部,像短信(short Message),Voice mail都会在此进行提示。

       Activity Manager(Activity管理):用来管理应用程序生命周期并提供常用的导航回退功能。

       

       三、 系统库和Android运行时

       系统库包括九个子系统,分别是图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。

       Android Runtime包含下面两个核心。

       Core Libraries

       Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。既兼容了大多数Java语言所需要调用的功能函数,又包括了Android的核心库,比如android.os、android.net、android.media等等。

       Dalvik Virtual Machine

       每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行 多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编 译器编译,然后通过SDK中 的 “dx” 工具转化成.dex格式由虚拟机执行。Dalvik Virtual Machine是一种基于寄存器的java虚拟机,Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。Android虽然使用Java程序语言来开发应用程序,但是却不使用一般大家目前在用的J2ME版本来执行Java程序,而是采用Android自有的Android Runtime来执行。

       面试时经常会问到这样一个问题:Android dvm的进程和Linux的进程应用程序的进程是否一样?事实上DVMdalivk的虚拟机每一个Android应用程序都在它自己的进程中运行都拥有一个独立的Dalvik虚拟机实例而每一个DVM都是在Linux 中的一个进程所以说可以认为是同一个概念。

       

       四、 Linux内核

       Android平台的操作系统用的是Linux,内核版本为2.6版,包含的主要功能有安全(Security)、内存管理(Memory Management)、进程管理(Process Managemen)、网络协议栈(Network Stack)、硬件驱动(Driver Model)等,Linux内核也同时作为硬件和软件栈之间的抽象层。

关于 Android 对 kernel 的修改,Google 的简报还提供了两个重点:

       Binder (IPC):提供有效率的程序间沟通管道(Inter-Process Communication)。Android 系统中有很多服务,而上层的应用程序经常要取用这些服务,一般的 Linux 系统已经提供了不少 IPC 的方式,不过 Android 还是搞了套自己的。虽说文件中解释原因为「一般 IPC 会造成额外资源花费,以及安全问题」,但其实这些都是可以基于原有架构在 kernel 外头解决的,为何要改在 kernel 里头,笔者对此存疑,也只能等找时间去研究程序代码才知了。

       Power Management:与桌上型计算机或笔记型计算机不同,手持装置的电源一向相当有限,必须无所不用其极的去想办法省电,但又不损及顺畅的使用经验。Android 在此采取了颇为积极的作法:「没有人说要用,就关掉」。例如某程序在放 MP3 音乐,于是此程序会需要 CPU 的计算能力,那就得开口要。如果与此同时没其它程序在执行,那么 LCD 显示器就可能被关掉,藉以省电。另一特别处,是在于 Linux kernel 一般考虑的都是在计算机上的作法,所以多半只有进入暂停、休眠等等的选择,而不会如此细致的去控制到各个小装置的电源供应。

       总结:

       1、Android的系统架构采用分层架构的思想,架构清晰,层次分明,协同工作。

       2 、Android的系统架构不仅从宏观上认识了Android系统,同时,也给我们的学习与实践指明了方向。若是从事Android应用开发,那应该研究Android的应用框架层和应用程序层;若是从事Android系统开发,那应该研究Android的系统库和Android运行时;若是从事Android驱动开发,那应该研究Android的Linux内核。总之,找准切入点,实践出真知。

猜你喜欢

转载自wuwei-1215.iteye.com/blog/2104554
今日推荐