安卓学习笔记(四):加载器Loaders 跟着API指南来学习

来源:互联网 发布:党章党规面前知敬畏 编辑:程序博客网 时间:2024/05/16 10:19

1.作用

在 Activity 或片段中异步加载数据。

2.基本特征

  • 可用于每个 Activity 和 Fragment
  • 支持异步加载数据。
  • 监控其数据源并在内容变化时传递新结果。
  • 在某一配置更改后重建加载器时,会自动重新连接上一个加载器的游标。 因此,它们无需重新查询其数据。
3.在应用中使用加载器

此部分描述如何在 Android 应用中使用加载器。使用加载器的应用通常包括:

  • Activity 或 Fragment
  • LoaderManager 的实例。
  • 一个 CursorLoader,用于加载由 ContentProvider 支持的数据。您也可以实现自己的 Loader 或 AsyncTaskLoader 子类,从其他源中加载数据。
  • 一个 LoaderManager.LoaderCallbacks 实现。您可以使用它来创建新加载器,并管理对现有加载器的引用。
  • 一种显示加载器数据的方法,如 SimpleCursorAdapter
  • 使用 CursorLoader 时的数据源,如 ContentProvider

4.启动加载器

LoaderManager 可在 Activity 或 Fragment 内管理一个或多个 Loader 实例。每个 Activity 或片段中只有一个 LoaderManager
在 Activity 的 onCreate() 方法或片段的onActivityCreated() 方法内初始化 Loader.
getLoaderManager().initLoader(0,null,this);

initLoader() 方法采用以下参数:

  • 用于标识加载器的唯一 ID。在此示例中,ID 为 0。
  • 在构建时提供给加载器的可选参数(在此示例中为 null)。
  • LoaderManager.LoaderCallbacks 实现, LoaderManager 将调用此实现来报告加载器事件。在此示例中,本地类实现 LoaderManager.LoaderCallbacks 接口,因此它会传递对自身的引用 this

initLoader() 调用确保加载器已初始化且处于活动状态。这可能会出现两种结果:

  • 如果 ID 指定的加载器已存在,则将重复使用上次创建的加载器。
  • 如果 ID 指定的加载器存在,则 initLoader() 将触发 LoaderManager.LoaderCallbacks 方法 onCreateLoader()。在此方法中,您可以实现代码以实例化并返回新加载器。
initLoader() 方法将返回已创建的 Loader,无论何种情况,给定的 LoaderManager.LoaderCallbacks 实现均与加载器相关联,且将在加载器状态变化时调用。
当您使用 initLoader() 时(如上所述),它将使用含有指定 ID 的现有加载器(如有)。如果没有,则它会创建一个。

5.重启加载器
 使用restartLoader()方法:
getLoaderManager().restartLoader(0, null, this);
6.使用 LoaderManager 回调

LoaderManager.LoaderCallbacks 是一个支持客户端与 LoaderManager 交互的回调接口。

LoaderManager.LoaderCallbacks 包括以下方法:

  • onCreateLoader():针对指定的 ID 进行实例化并返回新的 Loader
  • onLoadFinished() :将在先前创建的加载器完成加载时调用
  • onLoaderReset():将在先前创建的加载器重置且其数据因此不可用时调用
7.Loader API 摘要

类/接口说明LoaderManager一种与 Activity 或 Fragment 相关联的的抽象类,用于管理一个或多个 Loader 实例。 这有助于应用管理与Activity 或 Fragment 生命周期相关联的、运行时间较长的操作。它最常见的用法是与 CursorLoader 一起使用,但应用可自由写入其自己的加载器,用于加载其他类型的数据。 

每个 Activity 或片段中只有一个 LoaderManager。但一个 LoaderManager 可以有多个加载器。
LoaderManager.LoaderCallbacks一种回调接口,用于客户端与 LoaderManager 进行交互。例如,您可使用 onCreateLoader() 回调方法创建新的加载器。Loader一种执行异步数据加载的抽象类。这是加载器的基类。 您通常会使用 CursorLoader,但您也可以实现自己的子类。加载器处于活动状态时,应监控其数据源并在内容变化时传递新结果。AsyncTaskLoader提供 AsyncTask 来执行工作的抽象加载器。CursorLoaderAsyncTaskLoader 的子类,它将查询 ContentResolver 并返回一个 Cursor。此类采用标准方式为查询游标实现 Loader 协议。它是以 AsyncTaskLoader 为基础而构建,在后台线程中执行游标查询,以免阻塞应用的 UI。使用此加载器是从 ContentProvider 异步加载数据的最佳方式,而不用通过片段或 Activity 的 API 来执行托管查询。




阅读全文
0 0
原创粉丝点击