Android移动应用项目化教程
上QQ阅读APP看书,第一时间看更新

1.Android

Android是一种基于Linux的自由及开放源代码的操作系统。Android操作系统最初由Andy Rubin开发,主要支持手机。

Android系统于2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟,共同研发改良Android系统。随后,Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。此后,Android系统逐渐扩展到平板计算机及其他领域,如电视、数码照相机、游戏机等。

2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。在2013年9月24日,谷歌开发的操作系统Android迎来了5岁生日,此时,全世界采用这款系统的设备数量已经达到10亿台。2014年第一季度Android平台已占所有移动广告流量来源的42.8%。2017年3月,从Statcounter的网络活跃度看,谷歌的安卓系统占比37.93%,已成为最活跃的操作系统。

Android在正式发行之前,最开始拥有两个内部测试版本,并且以著名的机器人名称来对其进行命名,分别是:阿童木(Android Beta)、发条机器人(Android 1.0)。后来谷歌将其命名规则变更为用甜点作为系统版本代号的命名方法,如表1-1所示。

表1-1 Android系统用甜点作为系统版本代号的命名方法

续表

为了更好地了解Android操作系统,先看一下它的系统架构。Android大致可以分为四层架构,五块区域,如图1-1所示。

图1-1 Android的架构和区域

(1)Linux内核层

Android系统是基于Linux内核的,这一层为Android设备的各种硬件提供了底层的驱动,如显示驱动、声音驱动、照相机驱动、蓝牙驱动、Wi-Fi驱动、电源管理等。

(2)库文件层

库文件层通过库为系统提供主要的特性支持。例如,库提供了数据库的支持,OpenGL/ES库提供了3D绘图的支持,WebKit库提供了浏览器内核的支持等。

同样在库文件层还有Android运行库,它主要提供一些核心库,能够允许开发者使用Java语言编写Android应用。另外,Android运行库中还包含了Dalvik虚拟机,它使得每个Android应用都能运行在独立的进程中,并且拥有一个自己的Dalvik虚拟机实例。相较于Java虚拟机,Dalvik是专门为移动设备定制的,它针对手机内存、CPU性能有限等情况做了优化处理。

(3)应用框架层

应用框架层主要提供构建应用程序时可能用到的各种API,Android自带的一些核心应用就是使用这些API完成的,开发者也可以通过使用这些API构建自己的应用程序。

(4)应用层

所有安装在手机上的应用程序都属于这一层,比如系统自带的联系人、短信等程序,从Google Play上下载的小游戏、自己开发的程序等。

Android系统可提供以下内容供开发者开发应用程序:

(1)四大组件

Android系统四大组件分别是活动(Activity)、服务(Service)、内容提供器(Content Provider)和广播接收器(Broadcast Receiver)。

①Activity:一个Activity通常就是一个单独的屏幕(窗口)。Activity之间可以通过Intent进行通信。Android应用中每个Activity都必须在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。

②Service:用于在后台完成用户指定的操作。Service分为两种:started(启动)——当应用程序组件(如Activity)调用startService()方法启动服务时,服务处于started状态;bound(绑定)——当应用程序组件调用bindService()方法绑定到服务时,服务处于bound状态。

startService()与bindService()的区别在于启动服务是由其他组件调用startService()方法启动的,这导致服务的onStartCommand()方法被调用。当服务是started状态时,其生命周期与启动它的组件无关,并且可以在后台无限期运行,即使启动服务的组件已经被销毁。因此,服务需要在完成任务后调用stopSelf()方法停止,或者由其他组件调用stopService()方法停止。使用bindService()方法启动服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。

Service通常位于后台运行,它一般不需要与用户交互,因此Service组件没有图形用户界面。Service组件需要继承Service基类。Service组件通常用于为其他组件提供后台服务或监控其他组件的运行状态。开发人员需要使用<service></service>标签,在应用程序配置文件中声明全部的Service,

③Content Provider:可以将一个应用程序的指定数据集提供给其他应用程序使用。其他应用可以通过Content Resolver类从该内容提供者中获取或存入数据。开发人员不会直接使用Content Provider类的对象,大多数是通过Content Resolver对象实现对Content Provider的操作。

Content Provider实现数据共享,用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为Android没有提供所有应用共同访问的公共存储区。只有需要在多个应用程序间共享数据时才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。

Content Provider使用URI(统一资源标识符)来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由Content Provider来管理。

④Broadcast Receiver:可以使用它对外部事件进行过滤,只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。广播接收器没有用户界面,但是可以启动一个Activity或Service来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意,例如闪动背灯、震动、播放声音等。一般是在状态栏上放一个持久的图标,用户可以打开它并获取消息。

广播接收者的注册有两种方法,分别是程序动态注册和AndroidManifest文件中进行静态注册。动态注册广播接收器的特点是当用来注册的Activity关掉后,广播也就失效了。静态注册无须担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说,哪怕APP本身未启动,该APP订阅的广播在触发时也会对它起作用。

(2)丰富的系统控件

Android系统提供了丰富的系统控件,使得开发者可以很轻松地编写出漂亮的界面。当然,如果开发人员不满足于系统自带的控件效果,也完全可以定制属于自己的控件。

(3)SQLite数据库

Android系统还自带了这种轻量级、运算速度极快的嵌入式关系型数据库。它不仅支持标准的SQL语法,还可以通过Android封装好的API进行操作,让存储和读取数据变得非常方便。

(4)地理位置定位

移动设备和PC相比,地理位置定位功能是很大的一个亮点。现在的Android手机都内置有GPS,走到哪里都可以定位到自己的位置。

(5)强大的多媒体

Android系统还提供了丰富的多媒体服务,如音乐、视频、录音、拍照、闹铃等,这些都可以在程序中通过代码进行控制,让应用程序变得更加丰富多彩。

(6)传感器

Android手机中都会内置多种传感器,如加速度传感器、方向传感器等,这也算是移动设备的一大特点。通过灵活地使用这些传感器,开发人员可以做出很多在PC上根本无法实现的应用。