Încărcătoare de încărcătoare, dezvoltatori android

Clasele principale

Probele de cod pe subiect

Încărcătoarele care au apărut în Android 3.0 simplifică încărcarea asincronă a datelor într-o operație sau un fragment. Încărcătoarele au următoarele proprietăți:







  • Acestea sunt disponibile pentru orice operațiuni de activitate și fragmente Fragment.
  • Ele oferă încărcare asincronă a datelor.
  • Ei urmăresc sursa datelor și produc noi rezultate atunci când se schimbă conținutul.
  • Acestea sunt reconectate automat la ultimul cursor de bootloader când se recreează după o schimbare de configurație. Astfel, ei nu trebuie să solicite în mod repetat datele lor.

Boot Loader API Sumar

Există mai multe clase și interfețe care pot fi utilizate de încărcătoare în aplicație. Acestea sunt enumerate în acest tabel:

Clasă abstractă asociată cu activitate sau fragment pentru gestionarea uneia sau mai multor interfețe Loader. Aceasta permite aplicației să gestioneze operațiile de lungă durată împreună cu ciclul de viață Activitate sau Fragment; cel mai adesea această clasă este folosită cu CursorLoader. Cu toate acestea, aplicațiile își pot scrie propriile încărcătoare pentru a lucra cu alte tipuri de date.

Există o singură clasă LoaderManager pentru fiecare operație sau fragment. Cu toate acestea, clasa LoaderManager poate avea mai multe încărcătoare.

O interfață de apel invers care permite clientului să interacționeze cu LoaderManager. De exemplu, folosind metoda oncreateLoader () inversă, este creat un încărcător nou.

O clasă abstractă care efectuează încărcarea asincronă a datelor. Aceasta este clasa de bază pentru încărcător. CursorLoader este de obicei folosit. Dar puteți implementa propria dvs. subclasă. Atunci când încărcătorii sunt activi, aceștia trebuie să țină evidența sursei de date și să producă rezultate noi atunci când se modifică conținutul.

Bootloaderul abstract pe care AsyncTask îl oferă pentru a efectua lucrarea.

O subclasă a clasei AsyncTaskLoader. care solicită ContentResolver și returnează un cursor. Această clasă implementează protocolul Loader într-un mod standard pentru interogarea cursorilor. Este construit pe AsyncTaskLoader pentru a executa interogarea către cursor în firul de fundal, pentru a nu bloca interfața utilizator a aplicației. Utilizarea acestui bootloader este cea mai bună modalitate de a descărca în mod asincron datele de la ContentProvider în loc să executați o interogare gestionată prin platforma sau API-uri ale operațiunii.

Clasele și interfețele prezentate în acest tabel sunt cele mai importante componente, cu care încărcătorul este implementat în aplicație. Când creați fiecare bootloader, nu este necesar să utilizați toate aceste componente, dar întotdeauna specificați o legătură către LoaderManager pentru a inițializa încărcătorul și a utiliza implementarea clasei Loader. de exemplu CursorLoader. Următoarele secțiuni descriu modul de utilizare a acestor clase și interfețe în aplicație.

Utilizarea încărcătorilor în aplicație

Această secțiune descrie modul de utilizare a descărcătorilor în aplicația Android. În aplicațiile care utilizează încărcătoare, există de obicei următoarele elemente:

Pornirea încărcătorului de boot

LoaderManager controlează una sau mai multe instanțe Loader în Activitate sau Fragment. Există un singur LoaderManager pentru fiecare operație sau pentru fiecare fragment.

Încărcătorul este inițial inițializat în metoda onCreate () a operației sau în metoda onActivityCreated () a fragmentului. Acest lucru se face după cum urmează:

Metoda) "> initLoader () are următorii parametri:

  • Un identificator unic pentru încărcător. În acest exemplu, identificatorul este 0;
  • argumentele opționale care sunt transmise încărcătorului în timpul construcției (în acest exemplu este nulă);
  • implementarea LoaderManager.LoaderCallbacks. care solicită clasei LoaderManager să furnizeze evenimente bootloader. În acest exemplu, clasa locală implementează interfața LoaderManager.LoaderCallbacks. așa că trece propria referință la ea însăși: aceasta.

Call) "> initLoader () prevede inițializarea bootloader-ului. Puteți face una din două lucruri:

  • Dacă încărcătorul specificat cu identificatorul există deja, încărcătorul creat ultima va fi reutilizat.
  • În cazul în care încărcătorul specificat de către identificatorul nu există,) „> initLoader () metoda cauzele LoaderManager.LoaderCallbacks de onCreateLoader (). Este aici codul pus în aplicare pentru a instantia și a reveni un nou încărcător de boot. Pentru mai multe informații, consultați. În secțiunea onCreateLoader.

În orice caz, această implementare a LoaderManager.LoaderCallbacks este asociată încărcătorului și va fi apelată atunci când starea încărcătorului se modifică. Dacă, la momentul acestei convorbiri, componenta de asteptare este în stare inactivă, aceasta înseamnă că încărcătorul solicitat există deja și că a generat datele sale. În acest caz, sistemul va apela imediat, D) "> onLoadFinished () (la timp)"> initLoader ()), fiți pregătiți pentru aceasta. Pentru mai multe informații despre acest apel invers, consultați onLoadFinished.







Rețineți că metoda) „> initLoader () returnează Loader clasa generat. Dar este nevoie de înregistrare de referință clasa LoaderManager la acesta. Gestionează automat ciclul încărcător de viață. Clasa LoaderManager începe descărcarea și completează-l dacă este necesar, și susține încărcătorul și conexe acestuia Aceste conținut. acest lucru înseamnă că va interacționa rar direct cu încărcătorul (deși un exemplu de utilizare a metodelor de incarcare pentru a ajusta comportamentul său, a se vedea. LoaderThrottle în codul de probă). pentru intervenții în procesul de pentru a descărca metode LoaderManager.LoaderCallbacks. Pentru mai multe informații, utilizate în mod obișnuit atunci când au loc anumite evenimente în acest sens, a se vedea. în Utilizarea callbacks LoaderManager.

Repornirea încărcătorului de încărcare

. Când se folosește metoda) „> initLoader () așa cum este arătat mai sus, se utilizează încărcătorul de boot existent cu identificatorul specificat -. Dacă oricare dintre încărcătorul de boot Dacă nu, se va crea o metodă, cu toate acestea, uneori datele vechi trebuie să fie eliminate și un nou început ..

Pentru a șterge datele vechi metoda folosită) „> restartLoader () De exemplu, această metodă de implementare SearchView.OnQueryTextListener reporneste încărcător, atunci când modificați Loader interogarea unui utilizator trebuie să fie repornit, astfel încât să se poată utiliza un filtru de căutare modificat pentru a efectua o nouă interogare ..:

Folosind callback-urile din clasa LoaderManager

LoaderManager.LoaderCallbacks este o interfață de apel invers care permite clientului să interacționeze cu clasa LoaderManager.

Este de așteptat ca încărcătoare, în special CursorLoader. își vor salva datele după ce se vor opri. Aceasta permite aplicațiilor să-și salveze datele în metodele onStop () și onStart () ale operației sau ale fragmentului, astfel încât atunci când utilizatorul revine la aplicație, el nu trebuie să aștepte până când datele sunt reîncărcate. Metodele LoaderManager.LoaderCallbacks sunt folosite pentru a afla când să creeze un bootloader nou și, de asemenea, să spună aplicației când este timpul să nu mai folosiți datele încărcate de bootloader.

Interfața LoaderManager.LoaderCallbacks utilizează următoarele metode:

  • onCreateLoader () - creează o instanță și returnează o nouă clasă Loader pentru acest identificator.
  • , D) "> onLoadFinished () - este apelat când încărcătorul creat anterior a terminat încărcarea.
  • ) "> onLoaderReset () - este apelat atunci când starea încărcătorului creat anterior este resetată, rezultând pierderea datelor sale.

Aceste metode sunt descrise mai detaliat în secțiunile de mai jos.

onCreateLoader

Atunci când încearcă să acceseze încărcătorul de boot (de exemplu, prin metoda) „> initLoader ()), se verifică dacă încărcătorul specificat de ID-ul. În cazul în care nu există, se produce LoaderManager.LoaderCallbacks onCreateLoader metoda (). Acest lucru este în cazul în care creați o nouă bootloader. de obicei, acesta va CursorLoader clasa. cu toate acestea, puteți implementa propria clasă și subclasă de Loader.

În acest exemplu, metoda onCreateLoader () inversă creează o clasă CursorLoader. Trebuie să construiți clasa CursorLoader utilizând metoda constructorului, care necesită un set complet de informații necesare pentru a executa cererea către ContentProvider. În particular, este necesar:

  • uri - URI-ul conținutului pe care doriți să îl primiți;
  • proiecție - lista coloanelor care trebuie returnate. Dacă treceți nul, toate coloanele vor fi returnate, iar acest lucru este ineficient;
  • selecția este un filtru care declară care rânduri să revină, formatată ca o clauză WHERE SQL (cu excepția clauzei WHERE). Când treceți null, toate rândurile pentru URI dat vor fi returnate;
  • selectionArgs - Puteți include caracterele "?" din selecție, care vor fi înlocuite cu valorile din selecțieArgs în ordinea în selecție. Valorile vor fi legate ca siruri de caractere;
  • sortOrder este ordinea rândurilor, formatată ca o clauză SQL ORDER BY (cu excepția ORDERULUI BY). Dacă treceți null, va fi utilizată ordinea standard de sortare, astfel încât este posibil ca lista să nu fie sortată.

onLoadFinished

Această metodă se numește când încărcătorul creat anterior a terminat încărcarea. Această metodă este garantată pentru a fi apelată înainte de lansarea ultimelor date furnizate acestui încărcător. În acest moment, este necesar să nu mai folosiți datele vechi (de îndată ce vor fi înlocuite). Cu toate acestea, nu ar trebui să faceți acest lucru singur, deoarece datele sunt deținute de încărcător și el va avea grijă de acest lucru.

Încărcătorul va elibera datele de îndată ce va afla că aplicația nu o mai folosește. De exemplu, dacă datele sunt un cursor de la CursorLoader. nu apelați singur (). Dacă cursorul este plasat în CursorAdapter. Utilizați metoda swapCursor () astfel încât vechiul Cursor să nu se închidă. De exemplu:

onLoaderReset

Această metodă se numește atunci când starea încărcătorului creat anterior este resetată, ceea ce duce la pierderea datelor sale. Acest apel de apel vă permite să știți când vor fi lansate date, astfel încât să puteți șterge legătura cu ele.

Această implementare apelează swapCursor () cu valoarea null:

De exemplu, implementarea completă a fragmentului Fragment este prezentată mai jos. care afișează ListView cu rezultatele cererii către furnizorul de conținut, cum ar fi persoanele de contact. Pentru a gestiona interogarea către furnizor, utilizați clasa CursorLoader.

Pentru ca o aplicație să poată accesa contactele utilizatorului, așa cum se arată în acest exemplu, manifestul său trebuie să aibă permisiunea READ_CONTACTS.

Alte exemple

În ApiDemos, există câteva exemple diferite care ilustrează utilizarea încărcătoarelor de încărcare:

  • LoaderCursor - versiunea completă a fragmentului prezentat mai sus.
  • LoaderThrottle este un exemplu de utilizare a regulamentului pentru a reduce numărul de solicitări pe care un furnizor de conținut le execută atunci când datele sale sunt modificate.

Pentru informații despre descărcarea și instalarea probelor de cod SDK, consultați Obținerea probelor de cod.

Urmați @AndroidDev pe Twitter

Urmăriți dezvoltatorii Android pe Google+

Verificați dezvoltatorii Android de pe YouTube

Această clasă necesită un nivel API sau mai mare

Acest document este selectat din cauza opțiunii selectate. Puteți modifica nivelul API al documentației cu selectorul de deasupra navigației din stânga.

Pentru mai multe informații despre specificarea nivelului API solicitat de aplicație, citiți Versiunile de suport pentru diferite platforme.







Articole similare

Trimiteți-le prietenilor: