Paging 库概览   Android Jetpack 的一部分。

Paging 库可帮助您从本地存储或通过网络从大型数据集中加载和显示分页数据。这种方法可让您的应用更高效地利用网络带宽和系统资源。Paging 库的组件旨在符合推荐的Android 应用架构,与其他 Jetpack 组件无缝集成,并提供一流的 Kotlin 支持。

使用 Paging 库的优势

Paging 库包含以下功能

  • 针对分页数据的内存缓存。这有助于确保您的应用在处理分页数据时高效利用系统资源。
  • 内置请求去重功能,有助于确保您的应用高效利用网络带宽和系统资源。
  • 可配置的 RecyclerView 适配器,可在用户滚动到已加载数据的末尾时自动请求数据。
  • 对 Kotlin 协程和流以及 LiveData 和 RxJava 的一流支持。
  • 内置错误处理支持,包括刷新和重试功能。

提供反馈

您的反馈有助于改进 Jetpack。如果您发现新问题或有改进此库的建议,请告诉我们。在创建新问题之前,请查看此库的现有问题。您可以点击星形按钮为您已发现的问题投票。

创建新问题

如需了解有关提交反馈的更多信息,请参阅问题跟踪器文档

设置

要将 Paging 组件导入到您的 Android 应用中,请将以下依赖项添加到您应用的 build.gradle 文件中

Groovy

dependencies {
  def paging_version = "3.3.6"

  implementation "androidx.paging:paging-runtime:$paging_version"

  // alternatively - without Android dependencies for tests
  testImplementation "androidx.paging:paging-common:$paging_version"

  // optional - RxJava2 support
  implementation "androidx.paging:paging-rxjava2:$paging_version"

  // optional - RxJava3 support
  implementation "androidx.paging:paging-rxjava3:$paging_version"

  // optional - Guava ListenableFuture support
  implementation "androidx.paging:paging-guava:$paging_version"

  // optional - Jetpack Compose integration
  implementation "androidx.paging:paging-compose:3.3.6"
}

Kotlin

dependencies {
  val paging_version = "3.3.6"

  implementation("androidx.paging:paging-runtime:$paging_version")

  // alternatively - without Android dependencies for tests
  testImplementation("androidx.paging:paging-common:$paging_version")

  // optional - RxJava2 support
  implementation("androidx.paging:paging-rxjava2:$paging_version")

  // optional - RxJava3 support
  implementation("androidx.paging:paging-rxjava3:$paging_version")

  // optional - Guava ListenableFuture support
  implementation("androidx.paging:paging-guava:$paging_version")

  // optional - Jetpack Compose integration
  implementation("androidx.paging:paging-compose:3.3.6")
}

库架构

Paging 库的组件在您应用的三个层中运行

  • Repository 层
  • ViewModel
  • UI 层
An image showing paged data flows from the PagingSource or RemoteMediator components in the repository layer to the Pager component in the ViewModel layer.
    Then the Pager component exposes a Flow of PagingData to the
    PagingDataAdapter in the UI layer.
图 1. Paging 库如何融入您的应用架构的示例。

本节介绍在每个层中运行的 Paging 库组件,以及它们如何协同工作以加载和显示分页数据。

Repository 层

Repository 层中的主要 Paging 库组件是 PagingSource。每个 PagingSource 对象都定义了一个数据源以及如何从该源检索数据。PagingSource 对象可以从任何单个源加载数据,包括网络源和本地数据库。

您可能使用的另一个 Paging 库组件是 RemoteMediatorRemoteMediator 对象处理来自分层数据源的分页,例如带有本地数据库缓存的网络数据源。

ViewModel 层

Pager 组件提供了一个公共 API,用于基于 PagingSource 对象和 PagingConfig 配置对象,构建以响应式流形式公开的 PagingData 实例。

ViewModel 层连接到 UI 的组件是 PagingDataPagingData 对象是分页数据快照的容器。它查询 PagingSource 对象并存储结果。

UI 层

UI 层中的主要 Paging 库组件是 PagingDataAdapter,这是一个处理分页数据的 RecyclerView 适配器。

此外,您还可以使用随附的 AsyncPagingDataDiffer 组件来构建您自己的自定义适配器。

其他资源

如需详细了解 Paging 库,请参阅以下其他资源

Codelabs