Operațiuni, dezvoltatori de Android

Clasele cheie

Vezi și:

În mod tipic, cererea constă în mai multe operații care sunt strâns legate între ele. De obicei, una dintre operațiunile din aplicație este desemnată drept "de bază", oferită utilizatorului atunci când aplicația este lansată pentru prima dată. La rândul său, fiecare operațiune poate începe o altă operație pentru a efectua diferite acțiuni. De fiecare dată când se pornește o nouă operație, operația precedentă se oprește, dar sistemul o salvează pe stivă ("stivă de tranziție în spate"). Când porniți o nouă operație, acesta este așezat în stivă de tranziție înapoi și afișat utilizatorului. Stackul înapoi funcționează în conformitate cu principiul "ultimul introdus - primul ieșit", prin urmare, după ce utilizatorul a terminat operațiunea curentă și a apăsat butonul Înapoi. operația curentă este scoasă din teanc (și distrusă), iar operația precedentă este reluată. (Pentru informații detaliate despre stiva de conversii, consultați Sarcini și stiva de tranziție înapoi.)







Când operația este oprită din cauza începerii unei noi operații, metodele de apel invers al ciclului de funcționare sunt folosite pentru a notifica modificarea stării sale. Există mai multe metode pe care o operație le poate lua din cauza unei schimbări a stării sale - crearea unei operațiuni, oprirea, reluarea sau distrugerea acesteia de către sistem; De asemenea, fiecare apel invers reprezintă capacitatea de a efectua o acțiune specifică potrivită pentru schimbarea de stat corespunzătoare. De exemplu, în cazul unei închideri, operația ar trebui să elibereze orice obiecte mari, de exemplu, o conexiune la o rețea sau la o bază de date. Când operația este reluată, puteți prelua resursele necesare și reluați operațiile întrerupte. Astfel de schimbări de stat fac parte din ciclul de viață al unei operațiuni.

Acest document discută despre elementele de bază ale creării și utilizării operațiilor, inclusiv o descriere completă a ciclului de viață al operațiunii, astfel încât să puteți înțelege mai bine cum să gestionați tranzițiile între diferitele stări ale operației.

Creați o operație

Pentru a crea o operație, mai întâi trebuie să creați o subclasă a clasei de activitate (sau să utilizați subclasa existentă). În această subclasă, trebuie să implementați metodele de apel invers apelate de sistem atunci când operația se schimbă de la o stare a ciclului său de viață la alta, de exemplu atunci când creați, opriți, reluați sau distrugeți o operație. Iată cele două metode de apel invers:

onCreate () Trebuie să implementați această metodă, deoarece sistemul o numește atunci când creați operația. În implementarea dvs., trebuie să inițializați componentele cheie ale operației. Cel mai important lucru aici este de a apela setContentView () pentru a determina aspectul interfeței utilizator a operației. onPause () Sistemul numește această metodă ca fiind primul semn al ieșirii utilizatorului din operație (cu toate acestea, acest lucru nu înseamnă întotdeauna că operația va fi distrusă). De obicei, este necesar să aplicați orice modificări care trebuie salvate în plus față de sesiunea curentă de utilizatori (deoarece utilizatorul nu se poate întoarce).

Există, de asemenea, alte metode de inversare a ciclului de viață pe care trebuie să le utilizați pentru a asigura o tranziție lină între operațiuni, precum și pentru a face față încălcărilor neprevăzute în funcționarea operațiunii, ca urmare a căror oprire sau chiar distrugere. O descriere mai detaliată a tuturor metodelor de inversare a ciclului de viață este furnizată în secțiunea privind gestionarea ciclului de viață.

Implementarea interfeței utilizator

Pentru a implementa interfața utilizator a operației, este utilizată o ierarhie a reprezentărilor obiectului obținută din clasa View. Fiecare vizualizare este responsabilă pentru o anumită zonă dreptunghiulară a ferestrei de operare și poate răspunde la acțiunile utilizatorului. De exemplu, o vizualizare poate fi un buton la care se face clic pentru a efectua o acțiune specifică.

Android oferă un set de vizualizări gata făcute, pe care le puteți utiliza pentru a crea un design și pentru a le organiza. Widgeturile sunt reprezentări cu elemente vizuale (și interactive), de exemplu, butoane, casete de text, casete de selectare sau doar imagini. Aspecturile sunt reprezentări primite de la clasa ViewGroup. oferind un model unic de aspect pentru reprezentările copilului lor, cum ar fi un aspect liniar, o rețea sau o structură relativă. De asemenea, puteți crea o subclasă pentru clasele View și ViewGroup (sau utilizați subclasele existente) pentru a crea propriile dvs. widget-uri și machete și apoi să le aplicați la aspectul operației.

Cea mai obișnuită metodă de a specifica un aspect cu ajutorul vizualizărilor este să utilizați fișierul de aspect XML stocat în resursele aplicației. Astfel, puteți stoca designul interfeței utilizator separat de codul sursă, care servește pentru a defini comportamentul operației. Pentru a seta aspectul ca interfață utilizator pentru operație, puteți utiliza metoda setContentView (). transmiterea în el a identificatorului de resurse pentru aspect. Cu toate acestea, puteți crea, de asemenea, o nouă vizualizare în codul de funcționare și puteți crea o ierarhie de vizualizări. Pentru aceasta, introduceți vizualizarea în ViewGroup. și apoi utilizați acest aspect prin trecerea obiectului rădăcină ViewGroup la metoda setContentView ().

Pentru detalii privind crearea unei interfețe de utilizator, consultați Interfața utilizatorului.

Pentru a face operațiunea disponibilă sistemului, aceasta trebuie declarată în fișierul manifest. Pentru aceasta, deschideți fișierul manifest și adăugați un element activitategt; ca copil al articolului Aplicația; De exemplu:

Utilizarea filtrelor intenționate

element lt; actiongt; indică faptul că acesta este punctul de intrare "principal" al aplicației. element lt; categorygt; indică faptul că această operațiune ar trebui specificată în lansatorul de aplicații al sistemului (astfel încât utilizatorii să poată începe această operație).

Cu toate acestea, dacă aveți nevoie de operație pentru a reacționa la intențiile implicite din alte aplicații (și, de asemenea, din aplicația dvs.), trebuie să definiți filtre suplimentare de intenție pentru operație. Pentru fiecare tip de intenție la care trebuie să reacționați, trebuie să specificați un obiect intent-filtergt; cuprinzând un element lt; actiongt; și un element opțional lt; categorygt; sau Datagt; (sau ambele). Aceste elemente determină tipul de intenție pe care operațiunea dvs. poate să o reacționeze.







Pentru mai multe informații despre modul în care operațiunile pot răspunde intențiilor, consultați Intențiile și Filtrele de intenție.

Pornirea unei operațiuni

Pentru a porni o altă operație, trebuie doar să apelați metoda startActivity (). trecând un obiect Intent la el. care descrie operațiunea inițiată. Intenția este fie o operație exactă pentru a începe, fie descrie tipul de operațiune pe care doriți să o efectuați (după care sistemul alege operația corespunzătoare pentru dvs., care poate fi chiar în altă aplicație). Intenția poate conține, de asemenea, o cantitate mică de date care va fi utilizată de operația de rulare.

Când lucrați cu propria aplicație, adesea trebuie să porniți operația dorită. Pentru a face acest lucru, trebuie să creați o intenție care să definească în mod explicit operația cerută folosind numele clasei. Următoarea este un exemplu de pornire a unei alte operații cu numele SignInActivity printr-o singură operație.

Cu toate acestea, este posibil ca aplicația dvs. să fie nevoită să efectueze anumite acțiuni, de exemplu, să trimită un e-mail, un mesaj text sau să actualizeze starea utilizând datele de la operația dvs. În acest caz, este posibil ca aplicația dvs. să nu aibă astfel de acțiuni, astfel încât să puteți utiliza operațiile din alte aplicații disponibile pe dispozitivul care poate efectua acțiunile necesare. Doar în acest caz, intențiile sunt deosebit de utile - puteți crea o intenție care să descrie acțiunea necesară, după care sistemul o lansează dintr-o altă aplicație. Dacă există mai multe operațiuni care pot procesa intenția, utilizatorul poate alege care dintre acestea să utilizeze. De exemplu, dacă un utilizator este obligat să trimită un e-mail, puteți crea următoarea intenție:

Rulați operația pentru a obține rezultatul

În unele cazuri, după începerea operației, poate fi necesar să obțineți rezultatul. Pentru aceasta, apelați metoda startActivityForResult () (în loc de startActivity ()). Pentru a obține rezultatul după operația ulterioară, implementați metoda onActivityResult () inversă. După finalizarea operației ulterioare, aceasta returnează rezultatul obiectului Intent la metoda called onActivityResult ().

De exemplu, utilizatorul va trebui să selecteze unul dintre contacte, astfel încât operația dvs. să poată efectua anumite acțiuni cu informații despre acest contact. Mai jos este un exemplu de a crea o astfel de intenție și prelucrarea rezultatului.

Acest exemplu demonstrează logica de bază care trebuie urmată la utilizarea metodei onActivityResult () pentru a gestiona rezultatul operației. Prima condiție verifică dacă cererea este reușită și dacă aceasta are succes, rezultatul pentru rezultatulCode va fi RESULT_OK; De asemenea, se verifică dacă cererea pentru care se obține acest rezultat este cunoscută și în acest caz requestCode corespunde celui de-al doilea parametru trimis la metoda startActivityForResult (). Aici, codul procesează rezultatul operației prin interogarea datelor returnate la Intent (parametrul de date).

În acest caz, ContentResolver face o cerere către furnizorul de conținut, care returnează un obiect Cursor. furnizând citirea datelor solicitate. Pentru informații suplimentare, consultați Furnizorii de conținut.

Pentru mai multe informații despre utilizarea intențiilor, consultați intențiile și filtrele de intenție.

Sfârșitul funcționării

Pentru a finaliza operația, trebuie doar să apelați metoda finală (). De asemenea, pentru a finaliza o operațiune separată care a fost pornită mai devreme, puteți apela metoda finishActivity ().

Notă. În majoritatea cazurilor, nu trebuie să terminați în mod explicit o operație care utilizează aceste metode. După cum este descris în următoarea secțiune privind gestionarea ciclului de viață, sistemul Android face acest lucru pentru dvs., deci nu este necesar să vă finalizați propriile operațiuni. Apelarea acestor metode poate afecta negativ comportamentul așteptat al aplicației. Acestea ar trebui să fie utilizate numai atunci când absolut nu doriți ca utilizatorul să se întoarcă la această instanță a operației.

Gestionarea ciclului de viață

Gestionarea ciclului de viață al operațiunilor prin implementarea metodelor de apel invers este importantă în dezvoltarea de aplicații fiabile și flexibile. Ciclul de viață al unei operațiuni este afectat în mod direct de legăturile sale cu alte operațiuni, cu sarcinile sale și cu teancul de conversii.

Există doar trei stări de funcționare:

Reluat Operația este efectuată în prim-planul ecranului și este afișată utilizatorului. (Această condiție este, de asemenea, denumite uneori „în curs“.) A suspendat prim-plan alte operațiuni, care este afișată utilizatorului, dar operațiunea nu este încă ascunsă. Aceasta este, în afară de operațiunea curentă, o altă operație este afișată, parțial transparentă sau nu ocupă întreg ecranul. Suspendarea operațiunilor este pe deplin activă (obiect de activitate este încă în memorie, acesta își păstrează toate informațiile cu privire la starea și informații despre elementele, și, de asemenea, rămâne asociat cu managerul de ferestre), dar în cazul unui deficit acut al sistemului de memorie se poate finaliza. Operația este acoperită complet de o altă operație (acum este executată în fundal). Funcționarea sa oprit este încă activă (obiect de activitate este încă în memorie, acesta își păstrează toate informațiile cu privire la starea și informații despre elementele, dar obiectul nu este asociat cu un manager de ferestre mai mult). Cu toate acestea, operațiunea nu mai este vizibilă pentru utilizator, iar în caz de lipsă de memorie, sistemul o poate completa.

Dacă operația este întreruptă sau oprită complet, sistemul poate să o elimine din memorie finalizând operația în sine (folosind metoda finish ()) sau pur și simplu finalizând operațiunea. Dacă operația este redeschisă (după finalizarea acesteia), va trebui să fie complet creată.

Implementarea apelurilor de apel pe durata ciclului de viață

Când o operație este tranziționată de la una dintre stările de mai sus la alta, notificările despre aceasta se realizează prin metode de apel invers. Toate metodele de apel invers sunt legături pe care le puteți suprascrie pentru a efectua o acțiune adecvată atunci când se schimbă starea de funcționare. Operațiunea de bază de mai jos include fiecare dintre metodele de bază ale ciclului de viață.

Notă. Atunci când implementați aceste metode de ciclu de viață, invoca întotdeauna punerea în aplicare a superclass înainte de a efectua orice acțiuni, așa cum se arată în exemplele de mai sus.

Împreună, toate aceste metode determină întregul ciclu de viață al unei operații. Prin implementarea acestor metode, puteți urmări trei bucle imbricate în ciclul de viață al unei operații:

  • Întregul ciclu de viață al unei operații are loc între apelarea metodei onCreate () și apelarea metodei onDestroy (). Operația dvs. ar trebui să configureze starea "globală" (de exemplu, definiția aspectului) în metoda onCreate (). și apoi eliberați toate resursele rămase în onDestroy (). De exemplu, dacă operația dvs. are un fir care rulează în fundal pentru a descărca date prin rețea, operația poate crea un astfel de fir în metoda onCreate (). și apoi opriți-o în metoda onDestroy ().

Ciclul de viață vizibil al unei operațiuni are loc între apelurile către metodele onStart () și onStop (). În acest timp, operația este afișată pe ecran, unde utilizatorul poate interacționa cu acesta. De exemplu, metoda onStop () este apelată când se pornește o nouă operație, iar cea curentă nu mai este afișată. În intervalul dintre apelurile acestor două metode, puteți salva resursele necesare afișării operației pentru utilizator. De exemplu, puteți înregistra obiectul BroadcastReceiver în metoda onStart () pentru a urmări modificările care afectează interfața cu utilizatorul și apoi a-l anulați înregistrarea în metoda onStop (). Când utilizatorul nu mai vede afișat. De-a lungul ciclului de viață al unei operații, sistemul poate invoca metodele onStart () și onStop () de mai multe ori. Deoarece operația este apoi afișată utilizatorului, este ascunsă de acesta.

Ciclul de viață al operațiunii efectuate în prim-plan. apare între apelurile către metodele onResume () și onPause (). În acest timp, operația este efectuată împotriva tuturor celorlalte operații și este afișată utilizatorului. Operația poate merge adesea în fundal și poate ieși din ea - de exemplu, metoda onPause () este apelată atunci când dispozitivul trece în starea de somn sau când apare o casetă de dialog. Deoarece trecerea la această stare poate fi efectuată destul de des, codul în aceste două metode ar trebui să fie ușor de evitat tranzițiile lente și nu să forțeze utilizatorul să aștepte.

Figura 1 ilustrează pasajele și căile pe care o operație le poate trece între state. Dreptunghiurile denotă metode de apel invers care pot fi implementate pentru a efectua acțiuni între tranzițiile unei operații de la o stare la alta.

Operațiuni, dezvoltatori de Android

Figura 1. Ciclul de viață al unei operațiuni.

Aceste aceleași metode pe ciclul de viață sunt enumerate în Tabelul 1, în care fiecare metodă este descrisă în detaliu callback și indicat în funcționare ciclu de viață în ansamblul său, inclusiv informații despre dacă sistemul poate finaliza operația metodei finalizare apel.

Tabelul 1. Rezumatul metodelor de apel invers al ciclului de viață al unei operații.

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.







Trimiteți-le prietenilor: