Android系统架构

安卓Android作为一个移动设备的开发平台,其系统构架被分成了四个部分,从高到低分别是:Android 应用层,Android 应用框架层,Android 系统运行层,Linux 内核层。

1.Android 应用层:包括系统应用和第三方应用等等,其中Android会同一系列核心应用程序包一起打包发布,其应用程序包括短信,联系人,日历,等等。

2.Android 应用框架层:可以说是应用程序的核心,所有的应用开发都必要遵循其框架的原则。同时,通过该框架,我们完全可以访问其核心应用程序所使用的API框架。(需要服从框架执行的安全限制)。当然,我们也可以在通过继承在其框架上进行扩展,以实现个性化应用等。【引用和了解的博客:软件体系结构—安卓系统架构之应用程序框架层分析—1】

Android 应用程序框架包含 Activity Manager(活动管理器)、Window Manager(窗口管理器)、Content Provider(内容提供器)、 View System(视图系统)、 Notification Manager(通告管理器)、Package Manager(包管理器)、 Telephony Manager(电话管理器)、 Location Manager、Resource Manager(位置管理器)、XMPP Service(XMPP服务)。
活动管理器:Activity Manager 管理各个应用的生命周期以及导航回退功能等。
窗口管理器:Window Manager 窗口主要分为两种窗口:应用窗口和公共窗口。其中应用窗口是指应用中的窗口,例如主界面,Dialog弹窗,菜单等等。而公共窗口则大部分值系统级别的,例如下拉状态栏,锁屏界面等。
内容提供器:Content Provider 内容提供者是应用程序之间共享数据的一直接口机制,能够使得不同的程序之间存取和分享数据。
视图系统 View System 其构成了应用程序的基本组件。例如文本框,按钮等。
通告管理器:Notification Manager 使得应用程序可以在状态栏上显示自定义的提示信息。
包管理器:Package Manager 系统中对于程序的管理。
电话管理器:Telephony Manager 用于管理手机的通话状态,电话信息以及电话通讯等
资源管理器:Resource Manager 其用于提供应用程序中的各种非代码资源。注意:资源管理器提供的是应用程序中的资源,而不是外部存储的资源
位置管理器 Location Manager 顾名思义,其负责和管理位置信息
XMPP服务:XMPP Service 用于提供一些服务。XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议):是一种即时消息协议,其用与信息的传输。
3.Android 系统运行层:其通过一些C/C++库来为Android提供主要的特性支持。其包括两部分,一部分是系统库,另外一部分则是Android NDK。NDK这里不做解释了,在安卓开发 开发前你需要了解的一些资料(一)已经了解过了。我们这里解释一下系统库。
 系统库:Libc、Media Framework、Surface Manager、Webkit、SGL、SSL、OpenGL ES、greeType、SQLite。
Libc:系统C库,一个从BSD继承来的标准C系统函数库,专门为基于Embedded linux的设备定制的。
Media Framework:多媒体库,基于PacketVideoopencore;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG。
Surface Manager:负责管理针对显示子系统的访问,并且为多个应用程序提供了2D和3D图层的无缝融合。
Webkit :浏览器引擎,支持Android浏览器和一个可嵌入的web视图
SGL :底层的2D图形引擎
SSL :位于TCP/IP协议栈与各种应用层协议之间,为数据通信提供支持
OpenGL ES :用于对3D效果的支持,基于OpenGLES 1.0 APIs实现;该库可以使用硬件3D加速或者使用高度优化的3D软加速。
greeType :位图(bitmap)和矢量(vector)字体显示
SQLite :一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。(安卓内置的数据库)
(安卓在运行时,其运行了核心库,同时也运行着Dalvik虚拟机(应用运行在Dalvik虚拟机上),Dalvik虚拟机不同于Java虚拟机,在安卓中,每一个应用程序都运行在自己的进程上,其由Dalvik虚拟机分配。Dalvik虚拟机是一种基于寄存器的Java虚拟机,可执行的文件格式为.dex 。Dalvik做了大量的内存优化,其在一些底层方面,Dalvik虚拟机需要依赖Linux内核。)

4.Linux 内核层:整个安卓系统框架的最底层,其为Android设备各种硬件提供了驱动。同时其也为硬件与软件打通了联系。这里不过多解释。所以说安卓是基于Linux的,因为其底层为Linux。
 我们了解安卓的系统框架之后,当我们在开发安卓应用时,我们要了解到其组成。Android的应用程序通常是由一个或多个基本组件组成(不同与其他语言,安卓中并没有常见的应用程序入口,例如C\C++、Java中的main方法),组件可以是被调用的基本功能模块。安卓程序利用组件实现程序内部或程序之间的模块调用来解决代码复用的问题,这也是Android程序非常重要的特性。
安卓程序中有4大核心组件:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收者)、ContentProvider(内容提供者)。

Activity
 Activity 是安卓中最基本的模块,其为用户操作提供一个可视化界面,在一个安卓程序中,可以包含一个或多个Activity 。Activity 是由 Android 系统进行维护的,它有自己的生命周期。其后面再了解。

Service
 Service是服务意思,其没有可视化的用户界面,主要是在后台运行,其可以在后台运行很久很久,甚至当App关闭掉时,Service依旧可以运行。例如:用户在做其它事情时可以在后台播放歌曲,在下载视频时可以切换致其它App,依旧可以下载。这就是服务的强大之处。(注意:服务不是线程.其运行在主线程中。需要注意)

BroadcastReceiver
 BroadcastReceiver(广播接收者)是一个专注于接收广播通知消息,并对其做出相对应的出来的组件。在安卓系统中,有着许许多多的广播,例如系统开机,系统将会发送一条广播,电量过低,系统也就会发送一条广播,网络改变,电量变化等等。当然自己的程序也可以发送广播。一个Android应用可以拥有任意数量的广播接收器,以对所有它感兴趣的通知信息予以响应。BroadcastReceiver是没有UI(图形界面)的,我们通常需要NotificationManager来通知用户。

ContentProvider
 ContentProvider(内容提供者) 是 应用程序之间共享数据的一种接口机制,它是一种更为高级的数据共享方法,可以指定需要共享的数据,而其他应用程序则可以在不知道数据来源、路径的情况下,对共享数据进行操作。

AndroidManifest.xml

每一个Androi