从3.0开始,Android支持loaders,loaders提供了异步载入数据以及监视数据源的变化的能力。
使用loaders#
初始化Loader#
getLoaderManager().initLoader( /*loader id*/0,
/*创建loader时的自定义参数*/null,
/*LoaderManager.LoaderCallbacks*/this);
- 回调对象需要实现:
- onCreateLoader()方法,这里需要创建一个新的loader。
- onLoadFinished()方法,
- onLoadReset()方法,
- 如果这个loader的id已经有其他loader使用,则之前的loader会被重用。
- 如果这个loader的id是新的,系统会调用回调对象中的onCreateLoader()。
- LoaderManager会管理loader的生命周期,因此创建好loader之后就不需要管它了
重新启动Loader#
当需要抛弃已存在的loader中的数据时,可以重启loader
getLoaderManager().restartLoader(0, null, this);
创建Loader#
通常在onCreateLoader()方法里创建Loader。一般的Android创建的只有CursorLoader,CursorLoader通过查询ContentProvider返回的cursor提供数据源。
响应onLoadFinished和onLoadReset方法#
- onLoadFinished在loader载入数据后调用,这个方法会确保在loader最后一次载入的数据释放前调用( This method is guaranteed to be called prior to the release of the last data that was supplied for this loader)
- onLoadReset这个方法的调用表示loader在重新初始化,之前load的数据已经没有用了
自定义Loader#
前面说过Android只提供了CursorLoader一种具体的Loader,我们也可以继承AsyncTaskLoader或者Loader来实现自定义Loader。AsyncTaskLoader提供了在其他线程中载入数据的功能,可扩展性比较好。参考AsyncTaskLoader