CursorLoader
文章目录
从ContentProvider查询数据比较耗时,在UI线程中查询可能会ANR,通过CursorLoader来实现,异步查询数据。
使用
CursorLoader依靠ContentProvider在后台执行一个异步的查询操作,并且返回数据给调用它的Activity或者Fragment。
- 定义使用CursorLoader的Activity
必须实现LoaderCallbacks接口,CursorLoader会触发这些回调方法。
1 | public class OtherFragment extends FragmentActivity implements LoaderManager.LoaderCallback<Cursor>{ |
- 初始化查询
为了初始化查询,需要执行LoaderManager.initLoader()初始化后台任务。可以在onCreate()或者onCreateView()中触发这个方法。
1 | getLoaderManager().initLoader(1,null,this); // 第一个参数为标志 第二个为可选的参数供Loader构造 第三个为Loader接口 |
注:getLoaderManager()只能在Fragment类中调用,在FragmentActicity中应该使用getSupportLoaderManager()
3. 开始查询
一旦初始化完成,它会回调onCreateLoader()方法。为了启动查询任务,在这个方法需要返回CursorLoader
1 |
|
一旦获取查询任务的Loader对象,就会开始在后台查询任务,当查询完成之后,就会执行onLoadFinished()回调函数。
4. 处理查询onLoadFinished()参数之一是Cursor,包含了查询的数据
1 |
|
在Cursor失效时,CursorLoader会被重置,通常会发生在Cursor相关的数据改变的时候,在重新执行查询操作之前,系统会执行onLoaderReset()方法。在这个方法中,应该删除当前Cursor上的所有数据,避免发生内存泄露。
1 |
|

