1.1.2 Android的系统框架

Android框架概述:

Android的架构是分层的,非常清晰,分工很明确。Android本身是一套软件堆叠(Software Stack),或称为"软件叠层架构",叠层主要分成三层:操作系统、中间件、应用程序

Android 软件栈

1、Applications(应用程序)

Android平台不仅仅是操作系统,也包含了许多应用程序,诸如SMS短信客户端程序、电话拨号程序、图片浏览器、Web浏览器等应用程序等等。

这些平台随附的应用与用户可以选择安装的应用一样,没有特殊状态,因此第三方应用可成为用户的默认网络浏览器、短信 Messenger 甚至默认键盘(有一些例外,例如系统的“设置”应用)。

但是毫无疑问的是:所有应用程序都是用Java语言编写的,并且这些应用程序都是可以被开发人员开发的其他应用程序所替换的,这点不同于传统手机操作系统固化在系统内部的系统软件,Android应用程序更加灵活和个性化。

2、Java APIFramework(应用程序框架)

应用程序框架层是我们从事Android开发的基础,很多核心应用程序是通过这一层来实现其核心功能的,开发人员也可以完全访问核心应用程序所使用的API框架。

该层简化了组件的重用,任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性),这使得开发人员可以直接使用其提供的组件来进行快速的应用程序开发,也可以通过继承而实现个性化的拓展。

下面对各个模块进行解释:

  • 内容提供器(Content Providers):使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。
  • 视图管理系统(View System):可以用来构建应用程序的基本组件,包括列表Lists、文本框Text boxes、按钮Buttons等等。
  • 活动管理器(Activity Manager):用来管理应用程序生命周期并提供常用的导航回退功能。
  • 位置管理器(Location Manager):提供位置服务。
  • 包管理器(Package Manager) :用来管理 Android系统内的程序。
  • 通知管理器(Notification Manager):使得应用程序可以在状态栏中显示自定义的提示信息。
  • 资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串、图形和布局文件。
  • 电话管理器(Telephony Manager):提供电话相关功能服务。
  • 窗口管理器(Window Manager):用来管理所有的窗口程序。
  • XMPP服务(XMPP Service):提供Google Talk服务。

这些服务的解释在初学者看来可能会非常晦涩难懂,而且也不知道我在说些什么当然也记不住我所说的,这再正常不过了,现在有个印象就好,等我们开发用到相关功能时就会豁然开朗啦~

3、Libraries(系统运行库)

与PC一样,每个Android应用程序都有自己的进程,每个Android应用程序都运行在Dalvik虚拟机之上,Dalvik虚拟机只执行.dex的可执行文件。

当Android应用程序通过编译,最后还需要通过SDK中的dx工具转化成.dex格式才能正常在虚拟机上执行。所以说当我们使用上面的Android应用框架时,Android系统会通过一些C/C++库来支持我们使用的各个组件,使其能更好地为我们服务。

当然了,这里面还分为两个部分:

  • 系统库
    系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。
    • WebKit:一套网页浏览器的软件引擎。
    • OpenMAX AL:一套嵌入式的多媒体应用标准
    • Libc:从BSD继承来的标准C系统函数库,专门为基于embedded linux的设备定制。
    • Media Framework: 多媒体库,基于PacketVideo OpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H.264、AAC、ARM。
    • OpenGL|ES:根据OpenGL ES 1.0API标准实现的3D绘图函数库。
    • Surface Manager:执行多个应用程序时候,负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成。
    • SQLite:小型的关系型数据库引擎。(我们以后会经常和它打交道,无论哪种类型APP的开发。)
    • FreeType:提供点阵字与向量字的描绘与显示。
    • SGL:底层的2D图形渲染引擎。
    • SSL:在Andorid上通信过程中实现握手。
  • Android运行时
    Android应用程序时采用Java语言编写,程序在Android运行时中执行,其运行时分为核心库和ART虚拟机两部分。
    • ART虚拟机:正如上文所说,每个Android应用程序都有一个专有的进程,并且不是多个程序运行在一个虚拟机中,而是每个Android程序都有一个ART虚拟机的实例,并在该实例中执行。
      相比于以前采用的Dalvik虚拟机(一种基于寄存器的Java虚拟机,而不是传统的基于栈的虚拟机,并进行了内存资源使用的优化,这使得它在运行速度上占有很大优势),ART是安装的时候就将应用程序编译好了,所以在执行的时候直接就可以运行的,这就使得应用的安装虽然慢一些,但开启和运行应用的速度要快很多。
    • 核心库:核心库提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,如:android.os、android.net、android.media等等。

4、HAL(硬件抽象层)

硬件抽象层提供标准界面,向更高级别的 Java API 框架显示设备硬件功能。

HAL 包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个界面,例如相机或蓝牙模块。当框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块。

5、Linux Kernel(Linux内核)

Android是基于Linux内核提供核心系统服务的,例如:安全、内存管理、进程管理、网络堆栈、驱动模型等。

Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。

如果你学过计算机网络的话就会知道分层的好处:使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。

也就是说各层各司其职,各层提供固定的功能服务,专业点可以说是高内聚、低耦合。

当然了,如果只是做应用开发,就不需要深入了解Linux Kernel层。

感谢优秀的你跋山涉水看到了这里,不如关注下让我们永远在一起!

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 124,549评论 16 534
  • 内容抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新...
    皇小弟阅读 29,887评论 21 573
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 70,551评论 12 116
  • 不知道这样的爱情剧情会不会有点老套,我们是经人介绍认识的。第一次见面那晚,我们在一家咖啡厅,不咸不淡的聊着我们这个...
    ETF成就财富梦想阅读 233评论 0 2
  • 做好金融交易的本质:把一招练到极致就会变成高手 来源:图解金融战国 老夫做金融交易多年,现在主做外汇和黄金。金融市...
    道复有无阅读 131评论 0 2