一. Android的系统架构
Android的系统架构采用了分层架构的思想,如图1所示。从上层到底层共包括四层,分别是应用程序程序层、应用框架层、系统库和Android运行时和Linux内核。
图1:Android系统架构图每层功能简要介绍如下:
1. 应用程序层
该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用Java语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等、友好共处。
2. 应用程序框架层
该层是Android应用开发的基础,开发人员大部分情况是在和她打交道。应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,任何一个应用程序都可以发布自身的功能模块,而其他应用程序则可以使用这些已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各种应用程序组件。
3. 系统库和Android运行时
系统库
系统库包括九个子系统,分别是图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。
Android运行时
包括核心库和Dalvik虚拟机。
核心库
既兼容了大多数Java语言所需要调用的功能函数,又包括了Android的核心库,比如android.os、android.net、android.media等等。
Dalvik虚拟机
Dalvik虚拟机是一种基于寄存器的java虚拟机,所支持的字节码(ByteCode)是“dex”文件(Dalvik Executable)
Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。
4. Linux内核
核心系统服务依赖于Linux内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也是作为硬件与软件栈的抽象层。驱动:显示驱动、摄像头驱动、键盘驱动、WiFi驱动、Audio驱动、flash内存驱动、Binder(IPC)驱动、电源管理等。
二. 总结
Android的系统架构采用分层架构的思想,架构清晰,层次分明,协同工作。
1. 关于Android学习的建议
Android的系统架构不仅从宏观上认识了Android系统,同时,也给我们的学习与实践指明了方向。
从事工作或学习 | 研究层 |
---|---|
Android应用开发 | Android的应用框架层和应用程序层 |
Android系统开发 | Android的系统库和Android运行时 |
Android驱动开发 | Android的Linux内核 |
找准切入点,对我们的学习和工作,无疑是有非常大的帮助的。
2. 平台与框架 的理解
每个开发者估计都纠结过平台和框架的概念,特别是对新手而言,平台和框架似乎总是前辈们口头上惯用的、玄而又玄的名词。
实际上,我们可以把平台理解为舞台,其强调了事物的支持特性,有如舞台具有支撑舞者在其上进行表演的特性。
同样,Android平台具有支持Android应用程序运行的特性,具体表现在运行时(Runtime)环境和接口,API。
框架可以理解为骨架,其强调了事物的可重用性。众所周知,人类无论高矮胖瘦、美丑强弱,其骨架都是相似的。反之,使用一个人类的骨架模型,可以塑造出不同的人体模型。
在软件开发过程中,使用框架可以开发出界面各异的、某一类应用程序。例如,输入法,有搜狗输入法、国笔输入法、百度输入法……等各有异同的应用程序。
框架的具体表现为一组协同工作的类,如界面组件类、事件处理类、网络通信类等。借助框架,开发者可以高效地开发出应用程序。
简而言之,框架帮助应用程序的开发,平台支持应用程序的运行,框架建立在平台之上。
3. 框架与应用程序
首先,理解两个概念 抽象和衍生
- 抽象:从相似的事物中,抽取出共同点,得到相似的结构
- 衍生:以抽象结构为基础,添加些其他功能,得到具体的事物。
框架里的函数能够呼叫应用程序之中的函数,通俗的讲是前辈呼叫晚辈,框架先于程序诞生,称之为前辈。程序在框架的基础上诞生,所以称为晚辈。前辈呼叫晚辈,会产生下述几种效果
- 框架里要定义很多的预设函数,工应用程序调用或者重写
- 程序员的主要作用就是设计各种函数供框架来调用
- 如果应用程序中修改或者取代了预设函数,框架就会去调用程序中的函数,反之会去调用预设函数。
应用框架的典型双向沟通情形
- 框架中预设了f1(),程序中也定义了f1()。此时优先呼叫晚辈的f1()函数。
- 框架「虚」设了f2(),亦即f2()是个抽象(abstract)函数。此时您务必
定义f2()來充实之,并供Linux/Windows 或其它函数呼叫。例如f3()呼叫f2()。 - 框架预设了f3(),程序并未定义f3()。此时呼叫预设的f3()函数。
- 框架预设了f4(),您也定义了f4()。此时优先呼叫f4()函数,而f4()可呼叫前辈(预设)的f4()函数。
从上图可以看到,框架和应用程序之间,主动权掌握在框架手里,框架决定如何呼叫应用程序中的函数。
网友评论