1.1 学习导入
1.1.1 什么是Android
所谓Android,中文俗称“安卓”,是一种以Linux为基础的开放源代码移动设备操作系统(Operating System,OS),主要用于智能手机和平板电脑,由谷歌(Google)成立的开放手机设备联盟(Open Handset Alliance,OHA)持续领导与开发。Android一词的本义指“机器人”,早期由Andy Rubin(Android之父)创办,现已发布的最新版本为Android 6.0(Android M)。
Android系统具有开放性、挣脱运营商的束缚、丰富的硬件选择、不受任何限制的开发商和无缝结合的Google应用等五大优势特色,成为最近几年叱咤移动互联网最火的系统之一。
1.1.2 什么是Android系统架构
Android采用了软件堆层(Software Stack,又名软件叠层)的架构,其系统架构主要由Linux内核(Kernel)、库(Libraries)和Android运行时(Runtime)、应用框架(Application Framework)和应用程序(Applications)等四个层次,如图1.1所示。
图1.1 Android系统架构图
1.Linux Kernel层
Android的Linux Kernel基于Linux内核,但并不包括全部的Linux,主要负责提供系统核心服务,如进程管理、内存管理、电源管理、网络协议栈、驱动模型与安全性等。Linux Kernel是位于硬件和软件堆之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务,具有高内聚、低耦合特征,主要作用为:
(1)提供核心服务:安全机制、内存管理、进程管理、网络、硬件驱动;
(2)扮演的是硬件层和系统其他层次之间的一个抽象层的概念;
(3)Android操作系统的初始化和编程接口与标准Linux系统有所不同。
2.系统库层
Android系统库包含一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(Application Framework)暴露给开发者。系统库由一系列二进制动态库共同构成,通常使用C、C++开发。与框架层的系统服务相比,系统库不能独立运行于线程中,需要被系统服务加载到其进程空间里,通过类库提供的JNI接口(Java Native Interface,Java本地调用接口)进行调用。系统库分为函数库和Android运行时两部分。
Android主要核心库包括:系统C库、多媒体框架(Media Framework)、桌面管理库(SurfaceManager)、嵌入式浏览器引擎(WebKit)、轻量级嵌入式关系数据库(SQLite)、FreeType库等。
Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序都是Dalvik虚拟机(Virtual Machine,VM)中的实例,运行在它们自己的进程中。Dalvik虚拟机采用基于寄存器的架构,被设计成在一个设备中可高效运行多个虚拟机,其可执行文件格式是.dex。.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。一个.dex文件通常会有多个.class文件。由于.dex文件有时必须进行最佳化,会使文件大小增加1~4倍,以ODEX结尾。dx是一套工具,可将Java .class转换成.dex格式。Dalvik虚拟机依赖于Linux内核提供基本功能,如线程和内存管理。
3.应用框架层
应用程序的体系结构旨在简化组件的重用,它是用户进行Android开发的基础,是谷歌发布核心应用时所使用的API框架。任何应用程序都能发布它的功能,且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。该层开放给用户的主要组件包括:视图系统(Views System)、内容提供者(Content Providers)、资源管理器(Resource Manager)、通知管理器(Notification Manager)、活动管理器(Activity Manager)等。
4.应用层
Android装配一个核心应用程序集合,包括电子邮件(E-mail)客户端、短消息(SMS)程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言编写的。
从上述内容可知,Android的软件叠层架构,层次清晰,分工明确。Android系统主要功能包的简要功能描述如表1.1所示。
表1.1 Android系统主要功能包的简要描述
1.1.3 什么是Android应用
Android应用(Application)是Android框架的一个系统组件,当Android程序启动时,Android系统会自动创建一个Application对象,用来存储系统的一些信息。通常用户不需要指定一个Application,这时系统会自动帮用户创建,如果用户需要创建自己的Application,也很简单,只需创建一个子类继承Application,并在AndroidManifest.xml的application标签中进行注册,即给application标签增加name属性,并将其值设置为用户创建的Application的名称。Application是单例(singleton)模式的一个类,Android系统会为每个程序运行时创建一个Application类的对象且仅创建一个,且application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局单例,因而在不同的活动(Activity)、服务(Service)等组件中获得的对象都是同一个对象,从而可通过Application来进行数据传递、数据共享、数据缓存等操作。Application的生命周期包括进程在Android系统中从启动到终止的所有阶段,即Android程序启动到停止的全过程,完全由Android系统所调度和控制。
所谓XML是Extensible Markup Language(可扩展标记语言)的缩写,是用户可用来创建自己标记的语言。
1.1.4 什么是Android上下文
Android上下文(Context)描述了应用程序的环境信息,通过上下文可获取应用程序的资源和调用一些操作,如简易的消息提示(toast)、发送意图等。在Android中,上下文只有活动、应用和服务,拥有一个上下文就可访问该实例对应的资源,并有权调用其方法。
在Android应用框架中,根据作用域的不同,可以把上下文分为两种,一种是活动上下文(Activity Context),另一种是应用上下文(Application Context)。
活动上下文在活动启动时被创建,主要用于保存当前对活动资源的引用。它在活动控制器类中被使用,当用户需要加载或者访问活动相关资源时,会需要用到该活动的上下文对象。它的生命周期跟活动是同步的,即当活动被销毁时,其对应的上下文也被销毁了,同时,该上下文相关的控件对象也将被销毁并回收。因此,活动上下文主要用于串联Android应用之中的对象和组件。
应用上下文在整个应用开始时被创建,用于保存对整个应用资源的引用,在程序中可以通过Activity Context的getApplicationContext()方法或者getApplication()方法来获取。在实际应用时,用户通常会把应用上下文当作全局对象的引用来使用。
1.1.5 什么是活动
活动(Activity)是Android应用程序提供交互界面的一个重要组件,也是Android重要组件之一,是一个用来与用户交互的系统模块,几乎所有的活动都是和用户进行交互的。Android的应用开发遵循经典的MVC(Model View Controller,模型-视图-控制器)设计模式,其中,Model表示应用程序核心,是应用程序中用于处理应用程序数据逻辑的部分;View用来显示数据(数据库记录),是应用程序中处理数据显示的部分;Controller主要负责处理输入(写入数据库记录),是应用程序中处理用户交互的部分。在Android中,活动主要用来做控制,它既可选择要显示的视图,也可从视图中获取数据,然后把数据传给Android程序的模型层进行处理,最后显示出处理结果。因此,活动是Android程序的表现层,显示可视化的用户界面,负责接收与用户交互所产生的界面事件。一个Android应用可包含一个或多个活动,一般在程序启动后会呈现一个活动,用于提示用户程序已经正常启动。活动在界面上的表现形式为:全屏窗体、非全屏悬浮窗体或对话框等。
1.1.6 什么是意图
Android意图(Intent)是一个动作的完整描述,包含产生组件、接收组件和传递数据信息,它利用消息实现应用程序之间的交互机制,这种消息描述了应用中一次操作的动作、数据及附加数据,系统通过该意图的描述找到对应的组件,并将意图传递给调用的组件,完成组件的调用。在一个Android应用中,意图是对执行某个操作的一个抽象描述,意图负责提供组件之间相互调用的相关信息传递,实现调用者和被调用者之间的解耦。如果把活动比作积木,那么意图就是胶水,即把不同的积木粘连起来;或者说,如果活动是指不同的手机屏幕,则意图就是把不同的手机屏幕粘连起来的胶水。
因此,意图主要负责程序跳转和传递数据,它是一种在不同组件之间传递的请求信息,是应用程序发出的请求和意图。作为一个完整的消息传递机制,它不仅需要发送端,还需要接收端。