Android相册模块实现

使用Loader实现异步动态加载检索本地图片数据

1.Loader特性:

(1).对于每个Activity或者Fragment都可用
(2).提供异步加载数据
(3).监视数据资源,当内容改变时重新更新
(4).当配置改变时,自动重新连接最新的cursor,故不需要重新查询数据

2.Loader相关类接口

(1).LoaderManager

对于每个activity或者fragment只存在一个与之相关的LoaderManager对象,该LoaderManager对象可以存在多个可供管理loader对象。

(2).LoaderManager.LoaderCallbacks

LoaderManager.LoaderCallbacks是个回掉接口,用于客户端与LoaderManager的交互,loader对象就是在其接口的onCreateLoader()方法中得到,在使用时需要覆盖其方法。

(3).CursorLoader

CursorLoader是AsyncTaskLoader的子类,通过它可以查询ContentResolver并返回一个Cursor对象,并使用该cursor对象在后台线程执行查询操作,以不至于会阻塞主线程,从一个内容提供者去异步加载数据是CursorLoader对象最大用处。

在使用装载器时,会涉及很多类和接口们,表中对它们总结一下:
|Class/Interface | 说明 |
| ———— | ——-: |
|LoaderManager |一个抽像类,关联到一个Activity或Fragment,管理一个或多个装载器的实例。这帮助一个应用管理那些与Activity或Fragment的生命周期相关的长时间运行的的操作。最常见的方式是与一个CursorLoader一起使用,然而应用是可以随便写它们自己的装载器以加载其它类型的数据。每个activity或fragment只有一个LoaderManager。但是一个LoaderManager可以拥有多个装载器。|
|LoaderManager.LoaderCallbacks |一个用于客户端与LoaderManager交互的回调接口。例如,你使用回调方法onCreateLoader()来创建一个新的装载器。|
|Loader(装载器)|一个执行异步数据加载的抽象类。它是加载器的基类。你可以使用典型的CursorLoader,但是你也可以实现你自己的子类。一旦装载器被激活,它们将监视它们的数据源并且在数据改变时发送新的结果。|
|AsyncTaskLoader|提供一个AsyncTask来执行异步加载工作的抽象类。|
|CursorLoader|AsyncTaskLoader的子类,它查询ContentResolver然后返回一个Cursor。这个类为查询cursor以标准的方式实现了装载器的协议,它的游标查询是通过AsyncTaskLoader在后台线程中执行,从而不会阻塞界面。使用这个装载器是从一个ContentProvider异步加载数据的最好方式。相比之下,通过fragment或activity的API来执行一个被管理的查询就不行了。|