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
TestPageriasSnapshot, 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
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).
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy język JavaScript jest wyłączony.
- Wczytywanie i wyświetlanie danych podzielonych na strony
- Migracja do Paging 3
- Strona z sieci i bazy danych