Omówienie biblioteki Paging   Jest częścią Android Jetpack.

Biblioteka Paging pomaga wczytywać i wyświetlać strony danych z większego zbioru danych z pamięci lokalnej lub przez sieć. Dzięki temu aplikacja może wydajniej wykorzystywać zarówno przepustowość sieci, jak i zasoby systemowe. Komponenty biblioteki Paging są zaprojektowane tak, aby pasowały do zalecanej architektury aplikacji na Androida, bezproblemowo integrowały się z innymi komponentami Jetpack i zapewniały najwyższej klasy obsługę Kotlina.

Zalety korzystania z biblioteki Paging

Biblioteka Paging zawiera te funkcje:

  • Pamięć podręczna w pamięci RAM na potrzeby danych podzielonych na strony. Dzięki temu aplikacja efektywnie wykorzystuje zasoby systemowe podczas pracy z danymi podzielonymi na strony.
  • Wbudowana deduplikacja żądań, która pomaga zapewnić, że aplikacja efektywnie wykorzystuje przepustowość sieci i zasoby systemowe.
  • Wbudowana obsługa współprogramów i przepływów w języku Kotlin oraz Jetpack Compose.
  • Wbudowana obsługa błędów, w tym funkcje odświeżania i ponawiania prób.
  • dedykowane narzędzia do testowania, takie jak TestPager i asSnapshot, do weryfikacji źródeł stronicowania i przekształceń danych.

Konfiguracja

Aby zaimportować komponenty stronicowania do aplikacji na Androida, dodaj do pliku build.gradle aplikacji te zależności:

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")
}

Dynamiczny

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"
}

Architektura biblioteki

Komponenty biblioteki Paging działają w 3 warstwach aplikacji:

  • Warstwa repozytorium
  • Warstwa ViewModel
  • Warstwa interfejsu
Ilustracja pokazująca przepływy danych ze stronami z komponentów PagingSource lub RemoteMediator w warstwie repozytorium do komponentu Pager w warstwie ViewModel.
    Następnie komponent Pager udostępnia Flow danych PagingData komponentom układu Lazy w warstwie interfejsu.
Rysunek 1. Przykład dopasowania biblioteki Paging do architektury aplikacji.

W tej sekcji opisujemy komponenty biblioteki Paging, które działają w poszczególnych warstwach, oraz sposób, w jaki współpracują ze sobą, aby wczytywać i wyświetlać dane podzielone na strony.

Warstwa repozytorium

Głównym komponentem biblioteki Paging w warstwie repozytorium jest PagingSource. Każdy obiekt PagingSource definiuje źródło danych i sposób pobierania danych z tego źródła. Obiekt PagingSource może wczytywać dane z dowolnego pojedynczego źródła, w tym ze źródeł sieciowych i lokalnych baz danych.

Innym komponentem biblioteki Paging, którego możesz użyć, jest RemoteMediator. Obiekt RemoteMediator obsługuje stronicowanie z warstwowego źródła danych, takiego jak sieciowe źródło danych z lokalną pamięcią podręczną bazy danych.

Warstwa ViewModel

Komponent Pager udostępnia publiczny interfejs API do tworzenia instancji PagingData, które są widoczne w strumieniach reaktywnych, na podstawie obiektu PagingSource i obiektu konfiguracji PagingConfig.

Komponent, który łączy warstwę ViewModel z interfejsem, to PagingData. Obiekt PagingData to kontener na zrzut danych podzielonych na strony. Wysyła zapytanie do obiektu PagingSource i zapisuje wynik.

Warstwa interfejsu użytkownika

Główny interfejs API interfejsu stronicowania to collectAsLazyPagingItems(). Udostępnia on elementy ze stron jako listę danych, które mogą być łatwo wykorzystywane przez komponenty leniwego układu Compose, takie jak LazyColumn i LazyRow.

Dodaj bibliotekę androidx.paging:paging-compose, aby używać interfejsów API zgodnych z Compose, które umożliwiają interfejsowi automatyczne reagowanie na wczytywanie danych, aktualizacje i błędy bez konieczności stosowania adapterów lub logiki różnicowej. Użyj funkcji rozszerzenia collectAsLazyPagingItems() w Flow<PagingData>, aby przekazać zwrócony obiekt LazyPagingItems do items() w LazyColumn.

@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()
            }
        }
    }
}

Więcej informacji znajdziesz w sekcji Duże zbiory danych (stronicowanie).