1.4 Android开发框架

Android系统作为一个开放的系统,体积庞大。对于不同的开发者来说,在开发过程中并不需要掌握整个Android系统,只需要进行其中某一部分的开发即可。由此,从功能上将Android开发分为移植开发移动电话系统、Android应用程序开发,以及Android系统开发3种。

从商业模式的角度来讲,移植开发移动电话系统和Android应用程序开发是Android开发的主流。移植开发移动电话系统主要由移动电话的制造者来进行开发,其产品主要是Android手机;而公司、个人和团体一般进行Android应用程序的开发,产生各种各样的Android应用程序。

对于Android移植开发,其主要工作集中于Linux内核中的相关设备驱动程序及Android本地框架中的硬件抽象层接口的开发;对于Android应用程序开发,其开发的应用程序与Android系统的第四个层次的应用程序是一个层次的内容;对于Android系统开发,涉及Android系统的各个层次,一般情况下是从底层到上层的整体开发。

Android开发框架包括基本的应用功能开发、数据存储、网络访问三大块。

1.4.1 应用方面

一般而言,一个完整的Android程序包括Activity、Broadcast Receiver、Service、Content Provider四部分。这四部分被称为Android四大组件,它们有各自不同的功能,但并不是每个Android程序都必须全部包括这四大组件,只需要根据功能要求选择相应的组件即可。

1.Activity

Activity是Android应用开发中最频繁、最基本的模块。在Android中,Activity类主要与界面资源文件相关联(res/layout目录下的xml资源,也可以不含任何界面资源),包含控件的显示设计、界面交互设计、事件的响应设计及数据处理设计、导航设计等Application设计的方方面面。

因此,对于一个Activity来说,它就是手机上的一个界面,相当于一个网页。所不同的是,每个Activity运行结束时都返回一个值,类似一个函数。Android系统会自动记录从首页到其他页面的所有跳转信息,并且自动将以前的Activity压入系统堆栈,用户可以通过编程的方式删除历史堆栈中的Activity Instance。

2.Broadcast Receiver

Broadcast Receiver为各种不同的Android应用程序间进行通信提供了可能。如当电话呼叫来临时,可以通过Broadcast Receiver来接收系统发出的电话来临的广播消息。对用户而言,用户是无法看到Broadcast Receiver事件的,它对用户是不透明的。Broadcast Receiver既可以在资源AndroidManifest.xml中注册,也可以在代码中通过Context.register-Receiver()进行注册。在AndroidManifest.xml中注册以后,当事件来临时,即使程序没有启动,系统也会自动启动此应用程序。另外,各应用程序可以很方便地通过Context.sendBroadcast()将自己的事件广播给其他应用程序。

3.Service

Android中的Service和Windows中的Service是一个概念,它是可以长期在后台运行的不可见的一个组件。用户可以通过StartService(Intent Service)启动一个Service,也可通过Context.bindService来绑定一个Service。

4.Content Provider

Content Provider提供了应用程序之间数据交换的机制,一个应用程序通过实现一个Content Provider的抽象接口将自己的数据暴露出去,并且隐蔽了具体的数据存储实现,这样就实现了Android应用程序内部数据的保密性。标准的Content Provider提供了基本的CRUD(Create、Read、Update、Delete)接口,并且实现了权限机制,保护了数据交互的安全性。

Android应用程序的工程文件目录包括以下几大部分。

■Java源代码部分(包含Activity):放置在src目录中。

■R.java文件:由Eclipse自动生成与维护,开发者不需要修改,提供了对Android资源的全局索引。

■Android Library:应用程序运行的Android库。

■assets目录:主要用于放置多媒体等文件。

■res目录:放置的是资源文件,drawable里面包含的是图片文件,layout里面包含的是布局文件,values里面主要包含的是字符串(strings.xml)、颜色(colors.xml)及数组(arrays.xml)资源。

■AndroidManifest.xml:应用的配置文件,在这个文件中需要声明所有用到的Activity、Service、Receiver等。

1.4.2 数据存储

Android应用中会对数据进行一定的操作,根据需求可对数据进行一定的存储。Android系统自带5种存储方式。

1.SharedPreferences存储数据

这种方式只保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型。比如应用程序的各种配置信息(如是否打开音效、是否使用震动效果、小游戏的玩家积分等),解锁口令密码等。

2.文件存储

Context提供了两个方法来打开数据文件里的文件I/O流:FileInputStream openFileInput(String name,int mode)和FileOutputStream openFileOutput(String name, int mode)。这两个方法的第一个参数用于指定文件名,第二个参数指定打开文件的模式。

3.SQLite存储数据

SQLite是轻量级嵌入式数据库引擎,它支持SQL语言,并且只利用很少的内存就有很好的性能。现在的主流移动设备,如Android、iPhone等,都使用SQLite作为复杂数据的存储引擎。在为移动设备开发应用程序时,也许会使用到SQLite来存储大量的数据,所以需要掌握移动设备上的SQLite开发技巧。

4.Content Provider存储数据

Android系统和其他操作系统不太一样,需要记住的是,数据在Android中是私有的。这些数据包括文件数据、数据库数据及一些其他类型的数据。这时,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据完全暴露出去,而且Content Provider以类似数据库中表的方式将数据暴露,也就是说Content Provider就像一个“数据库”。

5.网络存储数据

前面介绍的几种存储都是将数据存储在本地设备上,除此之外,还有一种存储(获取)数据的方式,就是通过网络来实现数据的存储和获取。其详细应用会在后面内容中具体讲解。

1.4.3 网络访问

Android主要通过java.net.*及Android.net.*来进行HTTP访问技术的封装;利用其提供的HttpPost、DefaultHttpClient、HttpResponse等访问接口来实现具体的Web服务访问。而Google官方也给我们提供了较多好用的网络请求框架。

1.HttpClient

HttpClient高效稳定,但是维护成本高昂,故Android开发团队不愿意继续维护该库,而是转投更为轻便的OkHttp。

2.HttpURLConnection

在Android 2.2版本之前,HttpClient拥有较少的Bug,因此使用它是最好的选择。而在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。对于新的应用程序,应该更加偏向于使用HttpURLConnection,因为在以后的工作当中,我们也会将更多的时间放在优化HttpURLConnection上。

3.OkHttp

OkHttp是一个Java的HTTP+SPDY客户端开发包,同时也支持Android,需要Android 2.3以上版本。特点:OkHttp是Android版HTTP客户端;非常高效,支持SPDY、连接池、GZIP和HTTP缓存;默认情况下,OkHttp会自动处理常见的网络问题,像二次连接、SSL的握手问题。

4.Volley

Volley是Google公司于2013年推出的网络请求框架,非常适合进行数据量不大但通信频繁的网络操作。而对于大数据量的网络操作,如下载文件等,Volley的表现则会非常糟糕。

5.Retrofit

Retrofit和Volley框架的请求方式很相似,底层网络请求采用OkHttp(效率高,Android 4.4底层采用OkHttp),采用注解方式来指定请求方式和URL地址,减少了代码量。

优秀的开源框架很多,这里不再一一赘述,推荐多多浏览GitHub网页,相信大家一定可以找到更多的优秀框架。