最近使用了一下Android Compatibility Package(最新版本r4改名叫做了Support Package),地址:http://developer.android.com/sdk/compatibility-library.html。这个Package主要是提供了较早平台版本不支持的一些API。目的是为了使程序员较少关注平台版本,而写出前向兼容的程序。比如http://code.google.com/p/iosched/这个应用就是使用的Compatibility Package。
Compatibility Package主要是加入了平板平台引入的一些API的支持,如Fragment,Loader等,我最近就把玩了一下Fragment和Loader,感觉很有意思。
(以上两段抄自《Android前向兼容的几个问题 》)
关于Android的兼容包,官方原文介绍:
The Support Package includes static "support libraries" that you can add to your Android application in order to use APIs that are either not available for older platform versions or that offer "utility" APIs that aren't a part of the framework APIs. The goal is to simplify your development by offering more APIs that you can bundle with your application so you can worry less about platform versions.
主要的类有:
Fragment
FragmentManager
FragmentTransaction
ListFragment
DialogFragment
LoaderManager
Loader
AsyncTaskLoader
CursorLoader
源码目录extras/android/support/v4/samples/下有例子,类似于Api Demos,可以编译安装试用。
看现在的Google更新的手机设备App的UI风格基本上都是ActionBar,左右滑动ViewPager。android兼容包没有提供Action Bar的兼容类,但是官方有个Demo,在http://developer.android.com/resources/samples/ActionBarCompat/index.html。还有一个就是,ViewPager实现了水平View滑动效果。http://android-developers.blogspot.com/2011/08/horizontal-view-swiping-with-viewpager.html,这里有介绍。
对于使用Compatibility Package来使用Fragment和Loader,使用上同Android 3.0引入的APIs基本相同,有些许细微差别,可以看http://developer.android.com/sdk/compatibility-library.html#Using
接下来简单介绍一下这几个类的概念和使用场景。
Fragment 介绍
Fragment是在Android 3.0引入的,从名字可以看出是片段。我的理解就是类似于,早年人们认为分子是构成物质的基本单位,但是后来人们发现原子才是。我觉得Fragment就类似于原子,而View之类的应该是电子。以View作为片段也是可以的,但是麻烦之处在于生命周期的管理和动态布局时View层次的变更处理起来比较麻烦,并且View一般很少用来处理业务逻辑,它的感觉更Base,在View的外面包装业务逻辑,而Fragment在内部封装业务逻辑,可以达到模块化,解耦合,代码重用。对于大的Activity可以进一步模块划分。但是Fragment的出现按文档来看应该是方便了动态布局的需求,特别是针对手机和平板设备。
一个典型的应用场景是,一个概要的列表的界面,然后一个详细信息的界面。比如在手机上做这个应用,往往是一个ListActivity,然后点击对应的项目后,跳转到项目的详细的Activity。但是对于大屏幕设备,比如说平板设备,一个10寸的屏幕,就显示个单行的大列表是太奢侈了,可能的布局是左面是题目列表,然后右面显示具体的内容。如图,fragments
http://developer.android.com/guide/practices/tablets-and-handsets.html,这个链接里详细说了对于同时支持平板和手机设备的应用的最佳实践。简单概括起来一句话,Google鼓励基于Fragment和ActionBar来设计Activity。
Loader 介绍
Loader用来异步加载数据,刚看接口和Guide的时候,感觉挺牛的,方便了异步加载数据,现在很多应用都是基于请求服务器获取数据,然后客户端不过是个前端展示应用。里面有大量的Web请求,写起来很麻烦。Loader封装了看起来不错的接口,但是我初步使用的感受是也不是很方便。
APIs主要有LoaderManager,LoaderManager是一个管理类,对于一个Activity或者Fragment可以有多个Loader,可以通过LoaderManager进行统一管理。还有两个基于Loader虚基类的两个类CursorLoader和AsyncTaskLoader。对于CursorLoader主要是用于数据库或者Content Provider的相关接口的数据的load。对于AsyncTaskLoader是在AsyncTask基础上和Loader的一个集成。AsyncTaskLoader也是个虚的类,要实现loadInBackgroud()方法,起初,我以为只要实现了这个方法,就好了,但是事实并不是这样,所以我觉得这个类设计的并不是很方便。简单的应用场景还不如用AsyncTask来的方便爽快。
Action Bar 介绍
原有Title升级版,主要是UI。对于手机设备,就是左边是Logo,右边是几个按钮,中间是标题。对于平板设备会复杂一些,Tab或者Drop-down导航,方便导航。对于ActionBar的非主Activity会有个向左的箭头,这个不是后退的意思,是上一级的意思。类似于Windows的向上,是同个应用的上一级。详细:http://developer.android.com/guide/topics/ui/actionbar.html#Up
android兼容包没有提供Action Bar的兼容类,但是官方有个Demo,在http://developer.android.com/resources/samples/ActionBarCompat/index.html

小结一下,个人感觉Fragment很有用,方便了代码重用,便于模块化,运行时动态变更布局。
另外,有人根据Google官方的Android兼容包写了http://actionbarsherlock.com/ 这个,个人感觉不错,主要是加入了ActionBar的支持。
END#每次水文后焦虑值都蹭蹭涨#