Potpuni vodič za straničenje velikih količina podataka pomoću Paginga 3

  • Implementacija troslojne arhitekture (repozitorij, ViewModel i korisničko sučelje) za upravljanje reaktivnim tokovima podataka.
  • Korištenje PagingSourcea i RemoteMediatora za koordinaciju učitavanja podataka između udaljenih API-ja i lokalnih baza podataka.
  • Optimizacija memorije i propusnosti putem inteligentnog predpreuzimanja i upravljanja stanjem učitavanja.

Stranično slanje velikih količina podataka pomoću straničenja 3

Siguran sam da vam se to dogodilo: otvorite aplikaciju s tisućama proizvoda ili slika i dok se pomičete, sve teče glatko, bez ikakvih prekida ili beskrajnih ekrana za učitavanje. Nije magija, to je... dobro implementirana paginacijaKada se radi o ogromnim količinama podataka, pokušaj učitavanja svega odjednom praktički će sigurno uzrokovati rušenje aplikacije, što nas vodi izravno do strašne pogreške OutOfMemory (OOM), jer zasićujemo memoriju. RAM uređaja s objektima koje korisnik čak ni ne vidi.

Kako bismo riješili ovaj nered, Google nam je dao biblioteku Jetpack Paging 3Ovaj alat ne samo da rastavlja informacije na upravljive stranice, već je i od temelja dizajniran za besprijekoran rad s Kotlinom, korutinama i Flowom. U osnovi, omogućuje nam posluživanje podataka točno na vrijeme, optimizirajući sistemske resurse i čineći navigaciju učinkovitijom. izuzetno fluidno i prirodno za svakoga tko koristi aplikaciju.

Kako funkcionira arhitektura Pageing 3?

Kako bi se izbjegao kaos, Treća stranica je organizirana u tri vrlo jasne razine koje se savršeno uklapaju u Čista arhitekturaPrvo, imamo sloj repozitorija, gdje je glavni igrač Izvor straniceOva komponenta zna odakle dolaze podaci, bilo iz baze podataka Room ili RESTful API-ja, i definira kako se svaki dio informacije dohvaća.

Vrhunski programeri programskih jezika žele učiti
Povezani članak:
RESTful API-ji: Što su, kako rade i najbolje prakse za njihovu implementaciju

Ako želimo podići razinu i stvoriti aplikaciju koja radi izvan mreže, sljedeće dolazi u obzir: RemoteMediatorOva osoba se ponaša poput dirigenta orkestra koji upravlja orkestrom. slojevit izvor podatakaPreuzima podatke s mreže i pohranjuje ih u lokalnu predmemoriju, osiguravajući da korisnik uvijek nešto vidi čak i bez pristupa internetu.

Prelazeći na prezentacijski sloj, nalazimo pejdžerOva komponenta stvara protok Podaci za straničenje na temelju određene konfiguracije (PagingConfig), gdje odlučujemo koliko stavki učitati po stranici i koliko dugo prije nego što se sljedeća stranica treba početi učitavati (poznati prefetch) kako korisnik ne bi primijetio prijelaz.

Dovođenje podataka do korisničkog sučelja

Kad dođemo do korisničkog sučelja, stvari postaju zanimljive. Ako koristite Jetpack ComposeZvjezdani alat je funkcija sakupi kao LazyPagingItems()Ovo pretvara tok podataka u objekt koji odgađa komponente dizajna, kao što su Lijeni stupac ili lijeni redMogu ih koristiti bez ikakvog napora, eliminirajući potrebu za pisanjem kompliciranih adaptera ili ručne logike diferencijacije.

Za one koji i dalje koriste tradicionalni sustav prikaza, Adapter podataka za straničenje To je rješenje. To je specijalizirani adapter koji nasljeđuje prednosti ListAdaptera, koristeći DiffUtil ažurirati samo stavke koje su se promijenile i automatski zahtijevati nove stranice pri korištenju RecyclerViewa u Androidu prilikom pomicanja prema kraju popisa.

Upravljanje stanjem i greškama

Jedna od najvećih prednosti ove biblioteke je ta što vas ne ostavlja na cjedilu s rukovanjem greškama. Straničenje otkriva stanje učitavanja na tri kritične točke: početno učitavanje (osvježavanje), učitavanje (dodavanje na početak) i preuzimanje (dodavanje). To nam omogućuje da stavimo indikatori učitavanja ili tipke za ponovni pokušaj upravo tamo gdje ih korisnik treba.

Ako želimo da popis izgleda profesionalno, možemo dodati Adapter stanja učitavanjaOva komponenta stvara dinamičko podnožje koje prikazuje rotirajući indikator učitavanja dok se dohvaćaju dodatni podaci ili poruku o pogrešci s gumbom. "Pokušaj ponovo" Ako je veza prekinula, sve to bez ometanja glavnog popisa podataka.

Strategije pozadinskog straničenja

Da bi frontend funkcionirao, i backend mora biti na razini. Postoji nekoliko načina za posluživanje ovih podataka. Najklasičniji je pomak i ograničenjegdje tražimo stranicu 2 s 10 stavki, iako to može biti sporo u vrlo velikim bazama podataka. S druge strane, stranice temeljene na kursoru Preferiraju ga divovi poput Twittera ili Facebooka; umjesto broja stranice, koristimo oznaku (poput ID-a posljednje stavke) za zahtjev sljedećih, što jamči da podaci se ne ponavljaju ako se novi zapisi ubacuju dok pregledavamo.

Postoji i varijanta koja se temelji na vremenske oznakeIdealno za zapisnike ili novosti, gdje zahtijevamo sve što je kreirano nakon određenog datuma i vremena. Bez obzira na tehniku, ključno je implementirati filteri i sortiranje u API-ju tako da klijent ne mora obrađivati ​​tisuće zapisa u memoriji, delegirajući to opterećenje na poslužitelj.

Napredni savjeti i optimizacija

Ako prelazite s Paging 2, primijetit ćete da je sada sve jednostavnije jer su stare klase DataSource objedinjene u Izvor straniceNadalje, sada možemo umetnuti prilagođeni razdjelnici između elemenata popisa, kao što je stavljanje slova abecede ispred skupine imena, korištenjem funkcije umetnutiSeparatori u toku podataka.

recyclerview
Povezani članak:
Potpuni vodič korak po korak: Kako koristiti RecyclerView na Androidu s primjerima i naprednim prilagođavanjem

Što se tiče testiranja, ne morate svaki put pokretati aplikaciju. Biblioteka testiranje straničenja TestPager nam nudi mogućnost simuliranja pomicanja i provjere vraća li PagingSource ispravne stranice i da navigacijske tipke (nextKey i prevKey) Dobro su izračunati, osiguravajući da je konačno iskustvo robusno. Podijelite ovu informaciju kako bi više ljudi moglo saznati o toj temi


Dodaj kao preferirani izvor