LoaderManager可以做什么
LoaderManager,相当于一个监听器(观察者),它会实时监听底层数据的变化,一旦数据发生变化,就会通知loader,然后就可以做相应的处理。它的特点是嵌入在每一个Activity或者Fragment中的,且只有一个,我们可以不必关心它何时开启或者关闭,只要对数据进行相应的处理就好了,十分地方便。它在一个单独线程载入数据,监测底层数据源,当探测到有改变时就更新或者重新查询。相当于进入界面的时候就开启了一个AsyncTask去查询我们需要的数据。
比如说,我们有个界面是Android设备上所有已安装的应用程序,然后我们监听系统语言改变和安装卸载改变的广播,一旦广播收到消息,我们就通知界面的loader去查询更新。
LoaderManager概念
- 每个Activity或者Fragment都有唯一的一个LoaderManager实例,用来启动、停止、保持、重启、关闭它的Loaders。
- 通常这些事件通过主要的Activity/Fragment声明周期事件来触发,而不是手动(当然也可以手动调用)。
- Loader的子类会异步载入(译者注:另外再开一个线程,就叫异步了。)数据,所以使用LoaderManager永远不会产生阻塞UI线程的情况。
- 当配置变化时,它会保持它里面的Loader们的状态,所以并不需要重新查询数据。(比如切换横竖屏)
- 当Loader的数据源改变,LoaderManager将会从对应的Loader上面接收到一个新的同步载入数据,并将更新数据返回给客户端。
- 任何Loader将处于三种状态之中,已启动、已停止、重置。处于已停止状态的Loader将会继续监听数据改变,但是不会将结果返回给客户端。在已停止状态,Loader可能被启动或者重启。
- 当Loader处于重置状态时,将不会执行新的载入操作,也不会发送新的结果集,也不会检测数据变化。
实现LoaderManager.LoaderCallbacks接口
public class SampleActivity extends Activity implements LoaderManager.LoaderCallbacks<D> {
public Loader<D> onCreateLoader(int id, Bundle args) { ... }
public void onLoadFinished(Loader<D> loader, D data) { ... }
public void onLoaderReset(Loader<D> loader) { ... }
/* ... */
}
onCreateLoader是一个工厂方法,用来返回一个新的Loader。LoaderManager将会在它第一次创建Loader的时候调用该方法。
onLoadFinished方法将在Loader创建完毕的时候自动调用。
onLoadReset该方法让你可以从就的数据中移除不再有用的数据。
参考
LoaderManager使用详解(一)—没有Loader之前的世界
LoaderManager使用详解(二)—了解LoaderManager