Omówienie biblioteki stron w ramach Jetpacka na Androida

Biblioteka stron pomaga wczytywać i wyświetlać strony danych z większego zbioru danych z pamięci lokalnej lub sieci. Dzięki temu aplikacja może efektywniej wykorzystywać zarówno przepustowość sieci, jak i zasoby systemowe. Komponenty biblioteki stron zostały zaprojektowane tak, aby pasowały do zalecanej architektury aplikacji na Androida, ściśle integrowały się z innymi komponentami Jetpacka i zapewniały pierwszorzędne wsparcie Kotlina.

Zalety korzystania z biblioteki stron z przekierowaniami

Biblioteka stron zawiera te funkcje:

  • Buforowanie w pamięci dla danych w postaci stron. Dzięki temu aplikacja będzie efektywnie korzystać z zasobów systemu podczas pracy z danymi na stronach.
  • Wbudowana reduplikacja żądań, która pomaga aplikacji efektywnie korzystać z przepustowości sieci i zasobów systemowych.
  • Konfigurowalne adaptery RecyclerView, które automatycznie wysyłają żądanie danych, gdy użytkownik przewija do końca załadowanych danych.
  • Doskonała obsługa coroutine i przepływów w Kotlinie, a także LiveData i RxJava.
  • Wbudowane funkcje obsługi błędów, w tym odświeżania i ponownego próbowania.

Prześlij opinię

Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli zauważysz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową bibliotekę, sprawdź dotychczasowe problemy. Możesz dodać swój głos do istniejącego problemu, klikając przycisk gwiazdki.

Tworzenie nowego zgłoszenia

Więcej informacji o przesyłaniu opinii znajdziesz w dokumentacji na temat Issue Tracker.

Konfiguracja

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

Odlotowe

dependencies {
  def paging_version = "3.3.2"

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

Kotlin

dependencies {
  val paging_version = "3.3.2"

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

Architektura biblioteki

Komponenty biblioteki Paging działają na 3 poziomach aplikacji:

  • Warstwa repozytorium
  • Warstwa ViewModel
  • Warstwa interfejsu
Ilustracja pokazująca przepływ danych stron z komponentów PagingSource lub RemoteMediator w warstwie repozytorium do komponentu Pager w warstwie ViewModel.
    Następnie komponent Pager udostępnia przepływ danych PagingData komponentowi PagingDataAdapter w warstwie interfejsu użytkownika.
Rysunek 1. Przykład tego, jak biblioteka Paging pasuje do architektury aplikacji.

W tej sekcji opisujemy komponenty biblioteki stronowania, które działają na poszczególnych poziomach, oraz sposób ich współpracy podczas wczytywania i wyświetlania danych na stronach.

Warstwa repozytorium

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

Innym komponentem biblioteki stronowania, którego możesz użyć, jest RemoteMediator. Obiekt RemoteMediator obsługuje podział na strony z warstwowego źródła danych, np. źródła danych sieciowych z lokalną pamięcią podręczną bazy danych.

Warstwa ViewModel

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

Komponent łączący warstwę ViewModel z interfejsem to PagingData. Obiekt PagingData to kontener na zrzut danych pogrupowanych na strony. Wysyła zapytanie do obiektu PagingSource i przechowuje wynik.

Warstwa interfejsu

Podstawowym komponentem biblioteki Paging na warstwie interfejsu użytkownika jest element PagingDataAdapter, czyli RecyclerViewadapter, który obsługuje dane posortowane.

Możesz też użyć dołączonego komponentu AsyncPagingDataDiffer, aby stworzyć własny niestandardowy adapter.

Dodatkowe materiały

Więcej informacji o bibliotece Paging znajdziesz w tych materiałach:

Ćwiczenia z programowania