Loader加载器
- 适用于所有Activity和Fragment。
- 提供以非同步方式载入资料。
- 监视资料来源,并在内容变更时传送新的结果。
- 可在设定变更后重新建立时,自动更新连接上次载入器的Cursor。
Loader存在的意义:
- 提高UI Thread响应,将费时操作放到loader中进行。
- 和content provider配合使用,可进一步封装data persistence操作,并提供observer,实现数据动态更新。
Loader的优势:
- 与AsyncTask一样,能够提高UI Thread的响应,但是如果使用AsyncTask则需要自己负责Activity或者Fragment生命周期事件的处理。而Loader一般要求我们提供LoaderCallback回调,此回调接口不受我们的应用的生命周期影响,是Loader自己维护的,我们只需要在相应的回调中提供相应的回调。
- 虽然ContentProvider已是数据库上的一层封装,但是Loader可以缓存之前查询的数据,这样相同语句的多次查询会提高效率;Loader可以实时提供数据更新,保持UI界面的内容与数据库统一。
Loader协作相关的类:
- LoaderManager:用于管理一个或者多个Loaer实例。每个Activity或Fragment中之有一个LoaderManager,但一个LoaderManager可以有多个加载器。
- LoaderCallbacks:用于客户端与LoaderManager进行交互。
- Loader:一种执行异步数据加载的抽象类。是加载器的基类。
- syncTaskLoader:提供AsyncTask来执行工作的抽象加载器。
- CursorLoader:AsyncTaskLoader的子类,将查询ContentResolver并返回Cursor。使用此加载器是从ContentProvider异步加载数据的最佳方式,而不用通过片段或者Activity的API来执行托管查询。