Loader在Android3.0引进,它让异步加载数据变得容易。
一、特征:
1、在Activity、Fragment中都可以使用
2、Loader可以提供异步加载数据
3、监视数据源的变化,当数据源发生变化的时候,会传递新的数据
4、当loader重建的时候,会自动链接到最后一个Loader的cursor数据上,而不去进行重新查找。
二、在app中使用Loader的时候,可能使用到的类和接口。
1、LoaderManager:这是一个抽象类,关联在Activity、Fragment上,管理一个或多个Loader,帮助app管理耗时操作在Activity、Fragment的生命周期过程中。最常和CursorLoader一块使用。每一个Activity或Fragment只有一个FragmentManager对象。一个FragmentManager可以管理多个Loader。
2、LoaderManager.LoaderCallbacks:和LoaderManger关联在一起的回调接口。onCreateLoader()会调方法,创建Loader对象。
3、Loader:抽象类,异步加载数据。主要使用CursorLoader。监视数据源的变化,当数据源发生改变的时候,传递新的数据内容。
4、AsyncTaskLoader:抽象的,提供了一个AsyncTask
5、CursorLoader:是AsyncTaskLoader的子类,使用ContentResolver查找数据,返回Cursor。加载Cursor数据的时候操作在非UI线程,so,不会阻塞UI线程。该类是查找ContentProvider提供出来的数据的最好的方式。
6、LoaderManager:用它实例化Loader--》cursorLoader
三、使用Loader的步骤
1、Activity、Fragment实现LoaderCallbacks回调接口。
2、创建LoaderManager的实例
getLoaderManager().initLoader(参数1:实例化的Loader的id, 参数2:传递参数onCreateLoader()方法的第二个参数, 参数3:回调接口);
3、CursorLoader在后台加载数据--》ContentProvider
4、LoaderManager.LoaderCallbacks实现
5、需要展示数据的:SimpleCursorAdapter
6、数据源:ContentProvider
四、注意事项
1、在一个Activity、Fragment中,只有一个LoaderManager实例。
2、需要在Activity的onCraete方法中或者是Fragment的onActivityCreated方法中实例化Loader对象:
getLoaderManager().initLoader(0, null, this);
参数:参数1:给Loader指定id,唯一;参数2:可选项;参数3:LoaderManager.LoaderCallbacks实例。(此处让Activity实现了LoaderManager.LoaderCallbacks接口)
3、 initLoader()方法调用后,有两种结果:
1)指定id的Loader已经存在,重用。
2)不存在,创建:onCreateLoader()
4、让Fragment可使用菜单
setHasOptionsMenu(true);