Ce este "contextul" android-context context, cod q - un rus (en)

După cum sugerează și numele, acesta este contextul stării actuale a aplicației / obiectului. Aceasta permite obiectelor noi create să înțeleagă ce se întâmplă. De obicei, îl numiți pentru a obține informații despre o altă parte a programului dvs. (activitate și pachet / aplicație).







Puteți obține contextul apelând getApplicationContext (). getContext (). getBaseContext () sau aceasta (când se află într-o clasă care este propagată din Context, de exemplu, clasele Cerere, Activitate, Service și IntentService).

Utilizarea tipică a contextului:

Crearea de obiecte noi. crearea de vizualizări noi, adaptoare, ascultători:

Accesul la resursele partajate standard. Servicii cum ar fi LAYOUT_INFLATER_SERVICE, SharedPreferences:

Accesul la componente este implicit. în ceea ce privește furnizorii de conținut, emisiunile, intențiile

Definiția contextului.

  • Contextul reprezintă datele de mediu
  • Oferă acces la astfel de lucruri, cum ar fi bazele de date

Condiții simplificate.

Să presupunem că persoana-X este directorul general al companiei-dezvoltator al software-ului.

Compania are un arhitect de frunte, acest arhitect lider face tot munca în companie, care include o bază de date, o interfață cu utilizatorul etc.

Acum CEO angajează un nou dezvoltator.

Este arhitectul care vorbește despre responsabilitatea noului angajat pe baza abilităților noii persoane, indiferent dacă va lucra cu baza de date sau interfața cu utilizatorul etc.

Condiții simplificate.

Acest lucru este similar cu accesarea activității Android pe resursa aplicației.

E ca atunci când vizitezi un hotel, vrei micul dejun, prânzul și cina la momentul potrivit, nu-i așa?

Există multe alte lucruri care vă plac în timpul sejurului dvs. Cum obții aceste lucruri?

Cereți persoanei responsabile de camere să vă aducă aceste lucruri.

Aici, persoana care deservește camerele este contextul, considerând că sunteți singurul eveniment și că hotelul va fi aplicația dvs. și, în final, micul dejun, prânzul și cina ar trebui să fie resurse.

Lucruri care sunt legate de context:

  1. Descărcați resursele.
  2. Lansarea de noi activități.
  3. Crearea de vizualizări.
  4. Obținerea unui serviciu de sistem.

Contextul este clasa de bază pentru activitate. Serviciu. Aplicație. și așa mai departe.

O altă modalitate de a descrie acest lucru este: să analizăm contextul în care televiziunea la distanță și canalul la televizor sunt resurse, servicii, folosirea intențiilor etc. - - Aici telecomanda acționează ca acces pentru a accesa toate resursele diferite în prim plan.

  • Astfel, accesul la distanță la canale, cum ar fi resursele, serviciile, utilizarea intențiilor etc.
  • În mod similar. Cel care are acces la telecomandă are, în mod natural, acces la toate lucrurile, cum ar fi resursele, serviciile, utilizarea intențiilor etc.

Diferite metode de apelare cu care puteți obține contextul

  • getApplicationContext ()
  • getContext ()
  • getBaseContext ()
  • Sau aceasta (când se află în clasa de activitate)

acest lucru -> se referă la contextul activității curente.

Tema Context în Android pare să fie prea confuză. Oamenii știu doar că contextul este necesar destul de des pentru a face lucruri de bază în Android. Oamenii intră uneori în panică deoarece încearcă să efectueze o operație care necesită un context și nu știu cum să "obțină" contextul potrivit. Voi încerca să demonstrez ideea Contextului în Android. O revizuire completă a problemei depășește domeniul de aplicare al acestui articol, însă voi încerca să ofer o imagine de ansamblu, astfel încât să înțelegeți ce este contextul și cum să îl utilizați. Pentru a înțelege ce este un context, să analizăm codul sursă:

Ei bine, documentația însăși oferă o explicație destul de simplă: clasa Context este o "Interfață pentru informații globale despre mediul aplicației".

Clasa context în sine este declarată ca o clasă abstractă, implementarea căreia este furnizată de sistemul de operare Android. Documentația mai indică faptul că contextul ". vă permite să accesați resursele și clasele de aplicații, precum și interceptarea operațiunilor la nivel de aplicație, cum ar fi lansarea, traducerea și obținerea intențiilor și așa mai departe. "

Acum puteți înțelege de ce numele este Context. Acest lucru se datorează faptului că este așa. Context furnizează un link sau cârlig, dacă este necesar, pentru activitatea, Serviciul, sau orice altă componentă, se leagă astfel la sistem, oferind acces la mediul de aplicare la nivel mondial. Cu alte cuvinte: Contextul oferă un răspuns la întrebarea componentelor „unde naiba, am trata cererea ca întreg și cum pot contacta / comunica cu restul cererii?“ Dacă acest lucru totul pare un pic confuz, repede uita la tehnicile de clasă a contextului descoperit, oferă câteva informații suplimentare despre adevărata sa natură.







Iată o eșantionare aleatorie a acestor metode: 1. getAssets () 2. getResources () 3. getPackageManager () 4. getString () 5. getSharedPrefsFile ()

Ce au în comun toate aceste metode? Toate acestea permit tuturor celor care au acces la Context să aibă acces la resursele aplicației.

Contextul, cu alte cuvinte, interceptează componenta care o referă, în restul mediului de aplicație. De exemplu, resursele (gândiți "/ active" în proiectul dvs.) sunt disponibile în întreaga aplicație, cu condiția ca activitatea, serviciul sau altceva să fie cunoscută cum să accesați aceste resurse. Același lucru este valabil și pentru "getResources ()", care vă permite să faceți lucruri precum "getResources (). GetColor () ", care vă conectează la resursele colors.xml (nu uitați că aapt permite accesul la resurse prin intermediul codului Java, aceasta este o problemă separată).

Rezultatul este că actualul context - aceasta este ceea ce permite accesul la resursele de sistem și componentele sale cârlige „mai multe aplicații“. Să ne uităm la subclasele Context, clasele care asigură implementarea clasei Context abstract. Cea mai evidentă clasă este o clasă moștenește de activitate Activitate ContextThemeWrapper, care este moștenit de la ContextWrapper, care este moștenită din context. Aceste clase sunt utile pentru înțelegerea lucrurilor la un nivel mai profund, dar în acest moment este suficient să se știe că ContextThemeWrapper și ContextWrapper - este destul de mult ceea ce au ei să pună în aplicare abstract clasa elemente de context în sine de context „ambalaj“ (contextul actual) și delegarea funcționează în acest context. Exemplu este util - într-o metodă abstractă clasă ContextWrapper «getAssets» din clasa context este pusă în aplicare după cum urmează:

MBase este doar un domeniu definit de constructor într-un context specific. Astfel, contextul este înfășurat și ContextWrapper deleagă implementarea metodei getAssets în acest context. Să ne întoarcem la clasa de activitate, care în cele din urmă moștenește din context pentru a vedea cum funcționează toate.

Probabil știți ce înseamnă "Activitate", dar pentru revizuire este, în principiu, "singurul lucru pe care îl poate face un utilizator. El se ocupă de furnizarea unei ferestre pentru găzduirea interfeței cu care interacționează utilizatorul. " Dezvoltatorii familiarizați cu alte API-uri și chiar cu cei care nu au dezvoltat-o ​​pot considera acest lucru drept un "ecran". Acest lucru este inexact din punct de vedere tehnic, dar nu contează pentru scopurile noastre. Deci, cum interacționează activitatea și contextul și ce se întâmplă exact în relațiile lor de moștenire?

Din nou, este util să examinăm exemple specifice. Știm cu toții cum să începem. Dacă aveți un „context“, din care sunteți, începe acțiunea, pur și simplu sunați startActivity (intenție), în cazul în care Intenție descrie contextul de la care începe acțiunea și activitatea pe care doriți să rulați. Aceasta este startActivitatea familiar (aceasta, SomeOtherActivity.class).

Și ce este "asta"? "Aceasta" este activitatea dvs., deoarece clasa Activitate este moștenită din Context. Lovitura completă arată astfel: Când apelați startActivity, clasa Activity în cele din urmă face ceva de genul:

Prin urmare, utilizează execStartActivity din clasa Instrumentation (de fapt, din clasa Instrumentation internă, numită ActivityResult).

În acest moment, începem să ne uităm în interiorul sistemului.

Aici sistemul de operare procesează totul. Deci, cum funcționează Instrumentation exact? Parametrul "acest" în metoda execStartActivity de mai sus este Activitatea dvs., adică Context și execStartActivity folosește acest context.

Prezentare generală 30.000: această clasă de instrumentație conține urme ale listei operațiilor pe care le controlează pentru a face acest lucru. Această listă este utilizată pentru a coordona toate acțiunile și a asigura buna funcționare a întregului proces de gestionare a fluxului de activități.

Sunt câteva operații pe care nu le-am studiat bine, în ce probleme sunt coordonatele și procesele. Eventual ActivityResult folosește propria sa operație - ActivityManagerNative.getDefault (). StartActivity (), care utilizează Contextul pe care l-ați trecut când ați sunat startActivity. Contextul în care ați trecut este folosit pentru a ajuta la "rezolvarea intenției", dacă este necesar. Rezoluția intenției este procesul prin care sistemul poate determina scopul intenției, dacă nu este specificat. (Consultați manualul pentru mai multe detalii).

Ultimul cuvânt: dintr-un motiv oarecare, oamenii care nu sunt familiarizați cu Android (și chiar și cu cei care nu sunt atât de noi) uită complet de programarea orientată pe obiecte atunci când vine vorba de Android. Din anumite motive, oamenii încearcă să reducă dezvoltarea Androidului la paradigme preconcepute sau comportament învățat.

În Android are propria paradigmă și un anumit model, care este de fapt destul de consistent, dacă eliberați noțiunile voastre preconcepute și pur și simplu citiți documentația și de gestionare pentru dezvoltatori. Dar punctul meu real, deși „obtinerea contextul corect“ poate fi uneori dificil, oamenii de panică în mod inutil, deoarece acestea se confruntă cu o situație în care au nevoie de un context, și cred că nu. Încă o dată, Java este un limbaj orientat pe obiecte, cu un design de moștenire.

Numai "aveți" un context în cadrul activității dvs., deoarece activitatea dvs. în sine este moștenită din context. Nu există nicio magie (cu excepția a ceea ce face sistemul de operare prin el însuși, pentru a seta diferiți parametri și pentru a "configura" corect contextul). Astfel, eliminarea problemelor de memorie / performanță (de exemplu, salvarea referințelor de context atunci când nu aveți nevoie sau de a face ceva care are consecințe negative asupra memoriei etc.), Contextul este un obiect ca orice alt , și poate fi trecut ca orice POJO (obiect obișnuit Java). Uneori este posibil să aveți nevoie de lucruri inteligente pentru a extrage acest context, dar orice clasă obișnuită Java care se extinde de la orice altceva decât obiectul în sine poate fi scrisă într-un mod care are acces la context; Expuneți pur și simplu o metodă publică care acceptă contextul și apoi o folosește în această clasă după cum este necesar. Aceasta nu a fost menită să fie o referință exhaustivă la componentele interne ale contextului sau Android, dar sper că acest lucru va fi util în demistificarea contextului.

Contextul este descriptorul sistemului; Oferă servicii precum rezolvarea resurselor, acces la baze de date și preferințe etc. Aplicația Android are activități. Acesta este similar cu descriptorul mediului în care rulează aplicația. Obiectul Activitate moștenește obiectul Context.







Trimiteți-le prietenilor: