关键知识点
1 RecyclerView的显示
2 Loader异步加载数据
一、Loader异步加载数据
1.Loader特性:
- 对于每个Activity或者Fragment都可用
- 提供异步加载数据
- 监视数据资源,当内容改变时重新更新
- 当配置改变时,自动重新连接最新的cursor,故不需要重新查询数据
2.Loader相关类接口
- LoaderManager
对于每个activity或者fragment只存在一个与之相关的LoaderManager对象,该LoaderManager对象可以存在多个可供管理loader对象。 - LoaderManager.LoaderCallbacks
LoaderManager.LoaderCallbacks是个回掉接口,用于客户端与LoaderManager的交互,loader对象就是在其接口的onCreateLoader()方法中得到,在使用时需要覆盖其方法。 - CursorLoader
CursorLoader是AsyncTaskLoader的子类,通过它可以查询ContentResolver并返回一个Cursor对象,并使用该cursor对象在后台线程执行查询操作,以不至于会阻塞主线程,从一个内容提供者去异步加载数据是CursorLoader对象最大用处。
3.简单使用Loaders
(1).得到LoaderManager对象
//得到LoaderManager对象
LoaderManager manager = content.getLoaderManager();
(2).初始化loader
在activity的onCreate()方法区或者在fragment的onActivityCreated()方法区中,需要初始化一个Loader对象(可能已经存在或者新创建),
getLoaderManager().initLoader(0, null, this);调用initLoader()方法是确保loader对象已经初始化且可用,然而存在下面2种情况
1).ID存在
如果指定ID的loader已经存在,将重新使用最新的loader对象
2).ID不存在
如果指定的ID不存在,通过initLoader()方法,将会触发LoaderManager.LoaderCallbacks的onCreateLoader()方法并返回一个新的loader
虽然通过initLoader()可以得到loader对象,但是我们不需要捕获该对象,但LoaderManager对象可以自动管理loader生命周期,因此不需要直接与loader对象直接交互
(3).实现LoaderCallbacks
以典型的CursorLoader为例,app允许数据在onStart() 和 onStop()函数中传递,一旦的当用户重新进入app,不必等待数据重新加载,LoaderManager.LoaderCallbacks包含下面3个重要函数
1).onCreateLoader()
Instantiate and return a new Loader for the given ID.
当loadermanager调用initLoader()时, 首先检查指定的id是否存在,如果不存在才会触发该方法,通过该方法才能创建一个loader。返回创建的CursorLoader对象,其中可以在创建对象时,指定查询的条件,并携带一个Cursor对象。
CursorLoader接收 uri projection selection selectionArgs sortOrder 等参数信息
// 返回一个new CursorLoader对象
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri uri = Uri.parse("content://com.baidu.provider/music");
return new CursorLoader(MainActivity.this, uri, null, null, null,
null);
}