Android开发总结笔记 Loader(加载器) 1-2-13

来源:互联网 发布:caffe 找不到cudnn 编辑:程序博客网 时间:2024/05/16 08:52

加载器这个东西用得不多,据说太重,不过官方倒是推荐加载数据库数据的时候使用


Loader是在3.0之后提出的,可以让activity或者fragment中异步加载数据更容易。并且具有以下特征

  • 可以用于每个Activity和Fragment
  • 提供异步加载数据
  • 监控数据源,如果内容发生变化马上传递新的结果
  • 当系统配置发生变化(如:横竖屏切换),会自动链接最后一个加载器的Cursor

下面是一些跟Loader相关的类
  • LoaderManager:跟一个Activity或者Fragment相连的抽象类,用于管理一个或者多个Loader实例,最常用的是CursorLoader,也可以自定义。一个Activity或者Fragment只能有一个LoaderManager,但是一个LoaderManager可以有多个Loader
  • LoaderManager.LoaderCallbacks:一个可以让客户端和LoaderManager进行交互的接口方法
  • Loader:异步加载数据的一个抽象类,是加载的一个积累,不过一般使用CursorLoader。当然也可以继承loader自己实现一个Loader。Loader可以监控数据的变化从而传递新的结果
  • AsyncTaskLoader:一个抽象的loader,内部封装了一个AsyncTask
  • CursorLoader:AsyncTaskLoader的子类,通过查询ContentProvider返回一个Cursor。这个类实现了加载器的协议,并且内部封装了AsyncTaskLoader来实现后台加载数据。用这个Loader来获取ContentPrivider中的数据是最好的方式

开启一个Loader 
要开启一个Loader,首先要通过getLoaderManager(v4包中是getSupportLoaderManager)方法获取一个LoaderManager的实例,然后通过initLoader()初始化   
LoaderManager loaderManager = getLoaderManager();
loaderManager.initLoader(0x00, null, this);
initLoader的三个参数分别是
  • Loader的标示
  • 要传给Loader的参数
  • LoaderCallBacks的引用
当执行initLoader之后,会有两种情况
  • 指定ID的Loader已经存在,前一个被创建的Loader将被复用
  • 指定ID的Loader不存在,触发LoaderManager.CallBackonCreateLoader方法

重启一个Loader
如果想要抛弃旧的数据可以使用下面这个方法。
getLoaderManager().restartLoader(0, null, this);
loader重启了之后,就可以修改搜索过滤器进行新一轮的搜索


使用LoaderManager的回调方法
LoaderManger的回调方法有三个
onCreateLoader利用给定的ID初始化并返回一个新的Loader
onLoadFinished:前一个Loader加载数据结束后的回调
mAdapter.swapCursor(data);//在该方法里面替换掉旧的数据源
onLoaderReset:前一个Loader重置时的回调,因此会导致它的数据不可用
mAdapter.swapCursor(null);//在该方法里去掉引用



0 0
原创粉丝点击