Paging-Bibliothek – Übersicht   Teil von Android Jetpack

Mit der Paging-Bibliothek können Sie Datenseiten aus einem größeren Dataset aus dem lokalen Speicher oder über ein Netzwerk laden und anzeigen. Mit diesem Ansatz kann Ihre App sowohl die Netzwerkbandbreite als auch die Systemressourcen effizienter nutzen. Die Komponenten der Paging-Bibliothek sind so konzipiert, dass sie in die empfohlene Android-App-Architektur passen, sich sauber in andere Jetpack-Komponenten einfügen und erstklassige Kotlin-Unterstützung bieten.

Vorteile der Paging-Bibliothek

Die Paging-Bibliothek umfasst die folgenden Funktionen:

  • In-Memory-Caching für Ihre ausgelagerten Daten. So wird sichergestellt, dass Ihre App Systemressourcen effizient nutzt, wenn sie mit ausgelagerten Daten arbeitet.
  • Integrierte Deduplizierung von Anfragen, die dafür sorgt, dass Ihre Anwendung Netzwerkbandbreite und Systemressourcen effizient nutzt.
  • Integrierte Unterstützung für Kotlin-Koroutinen, -Abläufe und Jetpack Compose.
  • Integrierte Unterstützung für die Fehlerbehandlung, einschließlich Aktualisierungs- und Wiederholungsfunktionen.
  • Spezielle Testdienstprogramme wie TestPager und asSnapshot, um Paging-Quellen und Datentransformationen zu prüfen.

Einrichtung

Wenn Sie Paging-Komponenten in Ihre Android-App importieren möchten, fügen Sie der Datei build.gradle Ihrer App die folgenden Abhängigkeiten hinzu:

Kotlin

dependencies {
  val paging_version = "3.5.3"

  // Needed for Android Views and LiveData. Optional if only using
  // paging-compose
  implementation("androidx.paging:paging-runtime:$paging_version")

  // Needed to collect PagingData flows in Jetpack Compose
  implementation("androidx.paging:paging-compose:$paging_version")

  // Needed to test PagingSource and PagingData transformations in isolation
  testImplementation("androidx.paging:paging-testing:$paging_version")
}

Groovy

dependencies {
  def paging_version = "3.5.3"

  // Needed for Android Views and LiveData. Optional if only using
  // paging-compose
  implementation "androidx.paging:paging-runtime:$paging_version"

  // Needed to collect PagingData flows in Jetpack Compose
  implementation "androidx.paging:paging-compose:$paging_version"

  // Needed to test PagingSource and PagingData transformations in isolation
  testImplementation "androidx.paging:paging-testing:$paging_version"
}

Bibliotheksarchitektur

Die Komponenten der Paging-Bibliothek werden auf drei Ebenen Ihrer App ausgeführt:

  • Die Repository-Ebene
  • Die ViewModel-Ebene
  • Die UI-Ebene
Ein Bild, das zeigt, wie paginierte Daten von den Komponenten „PagingSource“ oder „RemoteMediator“ in der Repository-Ebene zur Komponente „Pager“ in der ViewModel-Ebene fließen.
    Anschließend stellt die Pager-Komponente den Lazy-Layout-Komponenten in der UI-Ebene einen Flow von PagingData zur Verfügung.
Abbildung 1. Ein Beispiel dafür, wie die Paging-Bibliothek in die Architektur deiner App passt.

In diesem Abschnitt werden die Komponenten der Paging-Bibliothek beschrieben, die auf den einzelnen Ebenen ausgeführt werden, und wie sie zusammenarbeiten, um paginierte Daten zu laden und anzuzeigen.

Repository-Ebene

Die primäre Komponente der Paging-Bibliothek auf der Repository-Ebene ist PagingSource. Jedes PagingSource-Objekt definiert eine Datenquelle und wie Daten aus dieser Quelle abgerufen werden. Ein PagingSource-Objekt kann Daten aus einer beliebigen einzelnen Quelle laden, einschließlich Netzwerkquellen und lokaler Datenbanken.

Eine weitere Komponente der Paging-Bibliothek, die Sie verwenden können, ist RemoteMediator. Ein RemoteMediator-Objekt verarbeitet die Paginierung aus einer mehrschichtigen Datenquelle, z. B. einer Netzwerkdatenquelle mit einem lokalen Datenbankcache.

ViewModel-Ebene

Die Komponente Pager stellt eine öffentliche API zum Erstellen von Instanzen von PagingData bereit, die in reaktiven Streams verfügbar gemacht werden. Dies basiert auf einem PagingSource-Objekt und einem PagingConfig-Konfigurationsobjekt.

Die Komponente, die die ViewModel-Ebene mit der Benutzeroberfläche verbindet, ist PagingData. Ein PagingData-Objekt ist ein Container für einen Snapshot von paginierten Daten. Es fragt ein PagingSource-Objekt ab und speichert das Ergebnis.

UI-Ebene

Die primäre Paging-UI-API ist collectAsLazyPagingItems(). Sie stellt paginierte Elemente als Liste von Daten bereit, die von den Lazy-Layout-Komponenten von Compose wie LazyColumn und LazyRow einfach genutzt werden können.

Fügen Sie die Bibliothek androidx.paging:paging-compose hinzu, um Compose-kompatible APIs zu verwenden, mit denen die UI automatisch auf Datenlasten, Aktualisierungen und Fehler reagieren kann, ohne dass Adapter oder Diffing-Logik erforderlich sind. Verwenden Sie die Erweiterungsfunktion collectAsLazyPagingItems() für ein Flow<PagingData>, um den zurückgegebenen LazyPagingItems in einem LazyColumn an items() zu übergeben.

@Composable
fun MessageList(pager: Pager<Int, Message>) {
    val lazyPagingItems = pager.flow.collectAsLazyPagingItems()

    LazyColumn {
        items(
            lazyPagingItems.itemCount,
            key = lazyPagingItems.itemKey { it.id }
        ) { index ->
            val message = lazyPagingItems[index]
            if (message != null) {
                MessageRow(message)
            } else {
                MessagePlaceholder()
            }
        }
    }
}

Weitere Informationen finden Sie unter Große Datasets (Paging).