购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 Android应用开发概述

随着Android系统和智能设备的迅猛发展,Android已经成为全球范围内具有广泛影响力的操作系统。Android系统已经不仅仅是一款手机的操作系统,它越来越广泛地被应用于平板电脑、可佩戴设备、电视、数码相机等设备上,Android开发人才需求倍增,从长远上看,Android软件人才的需求也会越来越大。

从2007年11月5日谷歌公司正式向外界展示了这款名为Android的操作系统至今,Android已经经历了多个版本的更新,直到本书创作之初,最新的版本为Android 6.0 Marshmallow,代号“棉花糖”。

从Android 6.0开始,Android系统有了一个质的飞跃,本书将专注讲解Android 6.0及以上版本的开发。Android的各个版本之间大部分API都是向下兼容的,对于一些少部分的API,也提供了向下兼容包。

1.1.1 Android发展史与现状

2003年10月,Andy Rubin等人创建了与Android系统同名的Android公司,并组建了Android开发团队,最初的Android系统是一款针对数码相机开发的智能操作系统,之后被Google公司收购,从此Android取得了长足的发展,迅速占领了智能手机的市场份额。

自Android系统首次发布至今,Android经历了很多次版本更新,表1-1列出了Android系统的不同版本的发布时间及对应的版本号。

表1-1 Android系统的版本号

从Android 1.5版本开始,Android系统已经成为一个智能操作系统,Google开始将Android系统的版本以甜品的名字命名。随着Android系统近年来的快速普及与发展,越来越多的厂商加入Android的阵营,根据Gartner2015年第四季的调查,Android在智能手机市场的占有率为80.7%,排名第2的苹果iOS为17.7%。

因为Android系统发展迅速,版本众多,搭载Android系统各个版本的设备在现如今的市场上,并没有得到很好的统一,均有一定的占有率。图1-3是Google公司公布的Android各个版本的市场占有率,如图1-3所示。

从图1-3可知,在市面上占有率最高的为Android 4.x,在构建Android应用时,采用新的版本和技术的同时,一定要考虑Android 4.x的兼容性问题。

Android系统是基于Linux的智能操作系统,2007年11月,Google与84家硬件制造商、软件开发商及电信运营商组建开发手机联盟,共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。也就是说,Android系统是完全公开并且免费的,Android系统的快速发展,也与它的公开免费有很大关系。

图1-3 各版本市场占有率

1.1.2 Android基本架构

Android分为5个层,从高层到低层分别是应用程序层(Applications)、应用程序框架层(Application Framework)、系统运行库层(Libraries)、运行环境层(Android Runtime)和Linux核心层(Linux Kernel),如图1-4所示。

图1-4 Android基本架构

Applications 、Application Framework和Android Runtime的Core Libraries是Java程序,Android Runtime的Dalvik Virtual Machine代码为运行Java程序而实现的虚拟机,Libraries部分为C/C++语言编写的程序库,Linux Kernel部分为Linux内核和驱动。在Application Framework之下,由C/C++的程序库组成,通过JNI(Java Native Interface,Java本地调用)完成从Java到C的调用。

1.应用程序

所有的应用程序都是使用Java语言编写的,每一个应用程序由一个或者多个活动组成,活动必须以Activity类为超类,活动类似于操作系统上的进程,但是活动比操作系统的进程要更为灵活,与进程类似的是,活动可以在多种状态之间进行切换。

利用Java的跨平台性质,基于Android框架开发的应用程序可以不用编译运行于任何一台安装有Android系统的平台,这一点正是Android的精髓所在。

2.应用程序框架

应用程序的架构设计简化了组件的重用。任何一个应用程序都可以发布它的功能块,任何其他的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制),帮助程序员快速地开发程序,并且该应用程序重用机制也使用户可以方便地替换程序组件。

隐藏在每个应用后面的是一系列的服务和系统,其中包括:

丰富而又可扩展的视图(Views),可以用来构建应用程序,它包括列表(Lists)、网格(Grids)、文本框(Text Boxes)、按钮(Buttons),还有可嵌入的Web浏览器;

内容提供器(Content Providers),使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据;

资源管理器(Resource Manager),提供非代码资源的访问,如本地字符串、图形和布局文件(Layout Files);

通知管理器(Notification Manager),使得应用程序可以在状态栏中显示自定义的提示信息;

活动管理器(Activity Manager),用来管理应用程序生命周期并提供常用的导航回退功能。

3.系统运行库

(1)程序库

Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发者提供服务。

核心库主要包括基本的C库及多媒体库,以支持各种多媒体格式、位图和矢量字体、2D和3D图形引擎、浏览器、数据库支持。

此外包括一个硬件抽象层,Android并非所有的设备驱动都放在Linux内核里面,有一部分在用户空间实现。这么做的主要原因是可以避开Linux所遵循的GPL协议,一般情况下,如果要将Android移植到其他硬件去运行,只需要实现这部分代码即可,包括显示器驱动、声卡、相机、GPS、GSM等。

(2)Android运行库

Android包括一个核心库,该核心库提供了Java编程语言核心库的大多数功能。

每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。

Dalvik被设计成一个设备,可以同时高效地运行多个虚拟系统。

Dalvik虚拟机执行(.dex)的是Dalvik可执行文件,该格式文件针对小内存使用做了优化。

同时虚拟机是基于寄存器的,所有的类都经由Java编译器编译,然后通过SDK中的“dx”工具转化成.dex格式由虚拟机执行。

Dalvik虚拟机依赖于Linux内核的一些功能,比如线程机制和底层内存管理机制。

4.运行时环境

Android应用程序编写主要使用Java语言,而Java语言要想运行,需要一个虚拟机。

5.Linux内核

Android的核心系统服务依赖于Linux 2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。

Linux内核也同时作为硬件和软件栈之间的抽象层。另外,Linux内核还对其做了部分修改,主要涉及以下两部分修改。

(1)Binder

IPC(Inter Process Communication):提供有效的进程间通信,虽然Linux内核本身已经提供了这些功能,但Android系统很多服务都需要用到该功能,所以对进程间通信进行了重装封装。

(2)电源管理

为手持设备节省能耗。

Android应用开发主要关注应用程序层的开发,使用Java语言编写Android应用,一般包含3个部分,如表1-2所示。

表1-2 Java语言编写Android应用的部分

Android是以Linux操作系统为核心,并针对手机进行了专门的优化,例如电源管理、进程调度等。Linux提供了操作系统最基本的功能。

1.1.3 Android组件

Android系统中有著名的4大组件:Activity 、Service、BroadcastReceiver 、ContentProvider。一个商业的Android应用程序,通常由多个基本的组件联合组成。这4大组件在使用时候均需要在清单文件AndroidManifest.xml中进行注册,否则不予使用。本节将对这些组件进行简单的介绍,使读者对Android应用开发的内容有一个大致的认识,详细内容请参看本书2.5节。

1.活动(Activity)

Activity是Android应用中最直接与用户接触的组件,它负责加载View组件,使其展现给用户,并保持与用户的交互。所有的Activity组件均需要继承Activity类,这是一个Content的间接子类,包装了一些Activity的基本特性。

View组件是所有UI组件、容器组件的基类,也就是说,它可以是一个布局容器,也可以是一个布局容器内的基本UI组件。View组件一般通过XML布局资源文件定义,同时Android系统也对这些View组件提供了对应的实现类。如果需要通过某个Activity把指定的View组件显示出来,调用Activity的 setContentView()方法即可,它具有多个重载方法,可以传递一个XML资源ID或者View对象。

例如:

LinearLayout layout=new LinearLayout(this);

setContentView(layout);

或者:

setContentView(R.layout.main);

Activity为Android应用提供了一个用户界面,当一个Activity被开启之后,它具有自己的生命周期。Activity类也对这些生命周期提供了对应的方法,如果需要对Activity各个不同的生命周期作出响应,可以重写这些生命周期方法实现。对于大多数商业应用而言,整个系统中包含了多个Activity,在应用中逐步导航跳转开启这些Activity之后,会形成Activity的回退栈,当前显示并获得焦点的Activity位于这个回退栈的栈顶。

2.服务(Service)

Service主要用于在后台完成一些无须向用户展示界面的功能实现。通常位于系统后台运行,它一般不需要与用户进行交互,因此Service组件没有用户界面展示给用户。Service主要用于完成一些类似于下载文件、播放音乐等无须用户界面与用户进行交互的功能。

与Activity组件需要继承Activity类相似,Service组件同样需要继承Service类,Service类也是Context的间接子类,其中包装了一些Service的专有特性。一个Service被运行起来之后,它将具有自己独立的生命周期,Service类中对其各个不同的生命周期提供了对应的方法,开发人员可以通过在Service中重写Service类中这些生命周期方法,来响应Service各个生命周期的功能实现。

3.广播接收器(BroadcastReceiver)

BroadcastReceiver同样也是Android系统中的一个重要组件,BroadcastReceiver代表了一个广播接收器,用于接收系统中其他组件发送的广播,并对其进行响应或是拦截广播的继续传播。

广播是一个系统级的消息,当系统环境发生改变时会发送一些广播供对应的程序进行接收响应,例如:接收到一条短信、开机、关机、插上充电器、插上耳机、充电完成等,均会发送一条广播供需要监听此类广播的应用进行响应。除了一些系统事件的广播,开发人员也可以自定义广播内容。但是大部分情况下,开发应用时主要用于接收系统广播并对其进行响应,很少需要发送自定义的广播。

使用BroadcastReceiver组件接收广播非常简单,只需要实现自己的BroadcastReceiver子类,并重写onReceive()方法,就能完成BroadcastReceiver。而这个BroadcastReceiver对什么广播感兴趣,则需要对其进行另行配置。

4.内容提供者(ContentProvider)

Android系统作为一个智能操作系统,需要系统中运行的应用程序都必须是相互独立的,各自运行在自己的Dalvik虚拟机实例中。在正常情况下,Android应用之间不能进行实时的数据交换,而考虑到有些应用的数据需要对外进行共享,Android系统提供了一个标准的数据接口ContentProvider,通过应用提供的ContentProvider,可以在其他应用中对这个应用暴露出来的数据进行增、删、改、查。

为应用程序暴露数据接口非常简单,只需要继承ContentProvider类,并且实现insert()、delete()、update()、query()等方法,使外部应用可对本应用的数据进行增、删、改、查。

5.意图(Intent)

虽然Intent并不是Android应用的组件,也无须专门在清单文件中配置,但是它对于Android应用的作用非常大。除了ContentProvider之外,其他组件的启动,均需要通过Intent进行指定。Intent不仅可以明确指定一个Android组件进行启动,还可以提供一个标准的行为,再由Android系统配合意图过滤器来选定启动指定组件来完成任务。而Intent在开启组件的过程中,也可以进行各个组件间的数据传递。 pAHo2SyUVZdS7QN4hyn19Xhd+aQXeilg61rkCzh+cZbH98T5LTgHzHIxpjiHkgbC

点击中间区域
呼出菜单
上一章
目录
下一章
×