Android中-Loader加载器

Loader加载器:

Android3.0(API11推出的),用来进行异步数据的加载,内部使用AsyncTask实现,通常用在数据库的加载,随后V4中推出了兼容的版本
核心

  • LoaderManger
  • LoaderManger.LoaderCallBacks
  • Loader

Loader

  • 加载器的基类
  • AsyncTaskLoader是Loader的一个子类,内部使用AsyncTask处理耗时操作
  • CursorLoader是AsyncTaskLoader的一个子类,主要用来加载ContentProvider中的数据

LoaderManger

  • 加载器的管理者
  • 主要负责Loader的回调管理,一个Activity或者Fragment中只有一个LoaderManger,一个LoaderManger可以管理多个Loader
  • LoaderManger在初始化的时候,通过id去确定Loader,如果Loader不存在,那么将创建一个新的Loader,如果已经存在,将重新连接已经存在的Loader

LoaderManger.LoaderCallBacks

  • 加载器加载状态的回调函数
  • onCreatLoader当Loader不存在时,我们调用初始化Loader时,需要返回一个Loader对象
  • onLoadFinished 当Loader执行完异步任务,获取到数据之后的一个回调,将数据返回来
  • onLoaderReset 当Loader被重置时的调用,我们需要在这个回调中做资源的释放

AsyncTaskLoader

  • 需要重写loadInBackground,这个方法在后台线程执行,处理耗时操作
  • 我们需要在onStartLoading方法中主动调用forceLoade()方法强制进行数据的加载

下面通过一个栗子来解释

Android中-Loader加载器
Android中-Loader加载器
Android中-Loader加载器
Android中-Loader加载器
Finish的时候处理数据对象Cursor

这里可以实现一个联系人的模糊查询
Android中-Loader加载器
Android中-Loader加载器
Android中-Loader加载器
Android中-Loader加载器

在onLoadFinish的时候将Cursor对象的数据设置到Adapter上
adapter.swapCursor(data);

在onLoaderReset的时候,将数据置空
adapter.swapCursor(null);


自定义的CustomLoader extends AsyncTaskLoader

Android中-Loader加载器