# 宏观Android技术
# 一.Android技术体系结构
这是由Google官方提供的Android技术结构图,从这张图上我们能够看出整个Android操作系统被分为了四个层次,从下往上看,首先最下面是Linux kernel(这是Linux核心),Android操作系统本身是以Linux操作系统为核心的,这个Linux核心是针对于手机专门进行了优化(例如对电源的管理、进程的调度等等都进行了优化),从图中可以看出Linux Kernel里面大部分都是驱动程序,其中包括:
WARNING
Display Driver:显示驱动;
Camera Driver:摄像头的驱动;
Flash Memory Driver:闪存驱动器(初次理解:就是管理存储的);
Binder(IPC) Driver:binder驱动(初次理解:就是管理进程的; IPC:就是操作系统内核提供的进程间的通信机制;在Android终端上的应用 软件的通信几乎看不到IPC通信方式,取而代之 的是Binder方式。);
Keypad Driver:键盘驱动;
WiFi Driver:无线上网驱动;
Audio Drivers:音频驱动;
Power Management:电源管理;
那么这个Linux核心提供了这个操作系统所应该具有的最基本的功能。Android归根结底,它的本质还是操作系统,只要是操作系统,它的功能应该都是类似的,它都会提供一些计算机所具备的功能。
基于Linux核心之上,是所谓的Libraries,译为图书馆,这个Libraries又分为两部分,一部分是我们常用的一些类库,另一部分是Android RunTime这样的一个包。Android RunTime又分成两部分,核心包(Core Libraries)和虚拟机(Dalvik Virtual Machine,缩写DVM),SUN公司所提供的虚拟机是不适合运行在Android平台上的,所以Google公司自己开发了一个虚拟机(就是这个DVM,这也是针对Android操作系统特别优化过的)以及核心包(Core Libraries),这个Core Libraries所起的作用就类似于java中的JDK,因此,这里可以简单的理解成:所谓的Android RunTime就是一个针对于Android操作系统专门定制的虚拟机以及java 的SDK,我们所写的程序就是运行在Android RunTime上面。然后再看另外一部分:
这一部分是不属于java的,包含了:
WARNING
Surface Manage:Android 框架类库之一,管理访问显示子系统和从多模 块应用中无缝整合2D和3D的图形;
Media Framework:媒体的框架;
SQLite:这是一款轻型的数据库,是所有应用程序都可以使用的强大而轻量级的关系型数据库引擎;
OpenGL | ES:(全写Open Graphics Library)是个定义了一个跨编程语言、 跨平台的编程接口规格的专业的图形程序接口。
FreeType:位图和矢量字体渲染;
WebKit:浏览器的核心;
SGL:基本的2D图形引擎;
SSL:(Secure Sockets Layer 安全套接层),是为网络通信提供安全及数据 完整性的一种安全协议,该协议位于HTTP协议与传输层协议之间;
Libc:Android系统中libc是c层中最基本的函数库,libc中封装了io、文件、 socket等基本系统调用。所有上层的调用都需要经过libc封装层。
这些都是常见的一些类库,这一部分的类库都是运行在Liunx 核心之上的,这一些也就提供了手机中常用的一些功能。
然后再往上,就是Application Framework:应用程序框架。
基于这个框架,我们就可以往里面添写自己的代码了。Android给我们提供的应用程序框架有以下类:
WARNING
视图(View)——丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器。
内容提供者(Content Providers)——使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据。
资源管理器(Resource Manager)——提供访问非代码资源,如本地化字符串、图形和布局文件。
通知管理器(Notification Manager)——使所有的应用程序能够在状态栏显示自定义警告。
活动管理器(Activity Manager)——管理应用程序生命周期,提供通用的导航回退功能。
窗口管理器(Window Manager)。
定位管理器(Location Manager)——就是对于定位的管理器,通过定位管理器就可以获取当前手机定位的经纬度。
使用框架会大大降低开发的难度,简化手机开发的过程,同时还能保证我们的代码质量,因为如果没有这些,就只能直接调用Libraries,那么开发过程将会变得非常的复杂。
最上面就是Applications:应用程序,我们所编写的代码就处在这一层。我们的代码是要调用Application Framework,所以我们有必要非常清楚应用程序框架里面的内容,这是安卓开发学习的重点。
WARNING
学习方法:学习一门新技术要有宏观上的把握,其中最忌讳的就是直接去敲代码,直接钻到技术的细节里面去,这样容易导致迷失方向。
# 二.基于组件的应用程序开发
基于组件的应用程序开发思想:做软件开发时就像组装电脑一样将各种零件组装在一起,无需一行行的写代码。就是把一些常见的功能都封装成一个个的组件,然后将这些组件组合在一起,最终就形成一个完整的程序。
这种思想被广泛的应用在了Android技术当中。在Android应用开发当中,
最重要的四种组件(也就是常说的Android四大基本组件)是:
Activity活动窗口,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。
Activity
:每一个Activity就是一个活动窗口,这个窗口可以用来绘制UI界面, 并显示给用户且与用户交互,比如:接受用户的点击,手指的滑动,把应用 程序计算的结果显示给用户等。它是整个应用程序的门户。一个Android应 用程序当中所包含的Activity往往只有三四个,或者四五个,因为手机应用 程序太复杂的话,客户可能就不耐心去学习它,就不用它了。
Service
:Service在Android中主要完成一些耗时较长的一些操作。例如:网 络连接、长时间的IO操作、大部分数据处理的工作……等工作就是由Service 来完成的,但它是没有图形化界面的,用户是看不到它的,Service在后台默默的运行工作。
Content Provide
:我们可以把它看成是一种数据的共享的方法,就像图书馆 一样,只要知道图书馆的地址,任何人都可以去图书馆借书,而Content Provide是什么意思呢,如果我的应用程序有一个Content Provide,就意味着 这个应用程序向其他应用程序暴露了我这个应用程序包含的数据。只要其他的应用程序知道了Content Provide的地址,就可以来访问我这个应用程序的数据,所以说Content Provide是一种向外暴露数据的方法,比如电话本这个应用程序。
BroadcastReceiver
;广播接收器,它的作用是监听手机当中发生的一切的 事情,就是当手机哪怕发生一点点的事情,它都会向外面发送一个广播。例 如手机快没电了,手机重启,……,所谓的广播接收器可以理解为就是监听 系统行为的,广播接收器其实就是可以接收系统所发出的消息,根据消息的 不同给出相应的操作。举例:当手机快没电(低电量)时,手机就会向外发送一条广播,这个广 播是由系统发送给应用程序的,如果我们开发的 是一个游戏软件,那么这个游戏应用就会接收到这个广播,然后对用户相应的提示。