În programare Android, ce este mai exact un "Context" de clasă și pentru ce se utilizează?
Am citit despre asta pe site-ul dezvoltator, dar sunt incapabil să-l înțeleagă în mod clar.
Pune pur și simplu:
După cum sugerează și numele, l's contextul actual al cererii/obiect. Acesta vă permite nou-create obiecte înțelege ceea ce a fost întâmplă. De obicei te suna pentru a obține informații cu privire la o altă parte de program (activitate și pachet/aplicare).
Puteți obține contextul prin invocarea getApplicationContext()
, getContext()
, getBaseContext()
sau "asta" (atunci când într-o clasă, care se extinde de la "Context", cum ar fi Aplicația, Activitate, Servicii și IntentService clase).
Utilizările tipice de context:
TextView tv = new TextView(getContext()); ListAdapter adaptor = new SimpleCursorAdapter(getApplicationContext(), ...);
context.getSystemService(LAYOUT_INFLATER_SERVICE) getApplicationContext().getSharedPreferences(nume, modul);
getApplicationContext().getContentResolver().interogare(uri, ...);
Ia în considerare Persoana-X este CEO-ul de la un start-up companie de software.
Există o duce arhitect prezent în cadrul companiei, acest lucru duce arhitect nu toate de lucru în cadrul companiei care implică, cum ar fi baze de date, UI etc.
Acum CEO Angajează un Dezvoltator nou.
Este Arhitectul care spune responsabilitatea de nou angajat persoana bazează pe abilitățile de persoană nouă, dacă el va lucru pe baza de Date sau UI etc.
L's, cum ar fi accesul de activitate android app's resurse.
L's la fel ca atunci când vizitați un hotel, micul dejun, masa de prânz & cina în orare adecvate, nu?
Există multe alte lucruri care îți plac pe durata sejurului. Cum a face tu obține aceste lucruri?
Ai cere de la room-service persoană pentru a aduce aceste lucruri pentru tine.
Aici, de la room-service persoană este contextul având în vedere că sunt singură activitate, iar hotelul să fie app, în cele din urmă micul dejun, masa de prânz & cina trebuie să fie resurse.
Lucruri care implica context sunt:
Un alt mod de a descrie acest lucru: ia în Considerare contextul ca telecomanda de la un TV & canal's în televiziune sunt resurse, servicii, folosind punctele, etc - - - Aici de la distanță acționează ca un acces pentru a obține acces la toate diferite resurse în prim-plan.
Așa, de la Distanță are acces la canale, cum ar fi resurse, servicii, folosind punctele etc ....
De asemenea ... Oricine are acces de la distanță în mod natural are acces la toate lucrurile, cum ar fi resurse, servicii, folosind punctele etc.
Diferite metode prin care puteți obține context
getApplicationContext()
getContext()
getBaseContext()
Exemplu:
TextView TV=new TextView(this);
"asta" - > se referă la contextul activității curente.
Subiect de Contextul în Android pare a fi confuz pentru mulți. Oamenii știu doar că Context, este nevoie de destul de multe ori a face lucruri de bază în Android. Uneori, oamenii panică pentru că ei încearcă să facă efectuarea unor operații care necesită Contextul și ei nu știu cum să "obține" dreptul de Context. Am de gând să încerc să demitizeze ideea de Contextul în Android. Un tratament complet de problema este dincolo de sfera de aplicare a acestui post, dar voi încerca să dea o imagine de ansamblu, astfel încât să aveți un sentiment de ceea ce Context este și cum să-l folosească. Pentru a înțelege ce Context este, să ia o privire la codul sursă: https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/Context.java Ce este exact Context? Ei bine, documentația în sine oferă mai degrabă o explicație simplă: Contextul clasă este o "Interfață la nivel mondial de informații despre un mediu de aplicație". Contextul clasă în sine este declarat ca clasă abstractă, a căror aplicare este asigurată de sistemul de OPERARE Android. Documentația prevede că Context "...permite accesul la aplicații specifice de resurse și cursuri, precum și up-solicită aplicarea la nivel de operațiuni, cum ar fi lansarea de activități, de radiodifuziune și primirea punctele, etc". Puteți înțelege foarte bine, acum, de ce numele este Contextul. Pentru că nu e doar asta. Contextul oferă link-ul de cârlig sau, dacă vreți, pentru o Activitate, Servicii, sau orice altă componentă, astfel conectarea la sistem, care să permită accesul la cererea globală de mediu. Cu alte cuvinte: Contextul oferă răspunsul la componentele întrebarea "unde naiba sunt în legătură cu aplicația, în general, și cum nu am acces la/de a comunica cu restul aplicației?" Dacă acest lucru pare un pic confuz, o privire rapidă la metodele expuse de Contextul clasă oferă unele indicii suplimentare despre adevărata sa natură. Aici e o prelevări aleatorii de probe din aceste metode:
getAssets()
getResources()
getPackageManager()
getString()
getSharedPrefsFile()
Ce au toate aceste metode au în comun? Toate acestea permite oricine are acces la Contextul de a fi capabil de a accesa aplicație la nivel de resurse.
Contextul, în alte cuvinte, cârlige componenta care are o trimitere la acesta pentru restul de aplicare mediu. Activele (cred '/active folder în proiect), de exemplu, sunt disponibile în cerere, cu condiția ca o Activitate de Servicii sau orice știe cum să acceseze aceste resurse.
Același lucru este valabil pentru getResources()
care permite de a face lucruri cum ar fi getResources().getColor()
care va cârlig în colors.xmlresurse (nu conteaza care aapt permite accesul la resurse prin cod java, asta e o altă problemă). Rezultatul este că "Context" este ceea ce permite accesul la resurse de sistem și ce cârlige componente în "mare app". Să ne uităm la subclase de "Context", clasele care asigură punerea în aplicare a rezumat "Context" de clasă. Cel mai evident de clasă este o "Activitate" de clasă. "Activitate" moștenește de la
ContextThemeWrapper, care moștenește de la
ContextWrapper, care moștenește de la "Context" în sine. Aceste cursuri sunt utile pentru a uita-te la a înțelege lucrurile la un nivel mai profund, dar pentru moment e suficient să știi că
ContextThemeWrapper " și " ContextWrappersunt destul de mult ceea ce par a fi. Se pune în aplicare elemente abstracte de "Context" clasa în sine, prin "ambalaj" - un context (contextul real) și delegarea aceste funcții în acest context. Un exemplu este util - în
ContextWrapperclasă, metodă abstractă
getAssets` din "Context" clasa este implementat după cum urmează: @Override
public AssetManager getAssets() {
return mBase.getAssets();
}
mBase
este pur și simplu un câmp stabilite de constructor pentru un anumit context.
Deci un context este înfășurat și ContextWrapper delegaților săi punerea în aplicare a getAssets metodă pentru acest context. Să ne întoarcem la examinarea "Activitate" clasa care în cele din urmă moștenește de la "Context" pentru a vedea cum funcționează. Știți, probabil, ce este o Activitate, dar să revizuiască - este practic 'un singur lucru pe care utilizatorul o poate face. Este nevoie de grijă de a oferi o fereastră în care pentru a plasa UI care utilizatorul interacționează cu'. Dezvoltatorii familiarizat cu alte Api-uri și chiar non-dezvoltatorii s-ar putea gândi că vernacularly ca un "ecran". Asta e inexacte din punct de vedere tehnic, dar nu contează, pentru scopurile noastre. Deci, cum a face "Activitate" și "Context" de a interacționa și exact ceea ce se întâmplă în relația de moștenire? Din nou, este util să se uite la exemple specifice. Știm cu toții cum de a lansa Activități. Cu condiția să aveți "contextul" de la care încep Activitatea, pur și simplu apel
startActivity(intenție), în cazul în care Intenția descrie contextul de la care încep o Activitate și Activitatea pe care aș dori să încep. Aceasta este familiar
startActivity(asta, SomeOtherActivity.class). Și ce e "asta"? "asta" este Activitatea dumneavoastră, deoarece "Activitățile" de clasă moștenește de la "Context". Complet scoop este ca aceasta: atunci Când te sun
startActivity`, în cele din urmă la "activitățile" clasa execută ceva de genul asta:
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode);
Așa se utilizeaza execStartActivity "de la" Instrumente
clasa (de fapt, de la o clasă internă în Instrumentare", numit " ActivityResult). În acest moment, am început pentru a obține o privire la sistemul interne. Acest lucru este în cazul în care sistemul de OPERARE, de fapt, se ocupă de tot. Deci, cum face de Instrumentație și-a început Activitatea, mai exact? Ei bine, param
acest " în " execStartActivitymetoda de mai sus este Activitatea dumneavoastră, și anume Context, și
execStartActivityface uz de acest context. 30.000 de ansamblu este aceasta: Instrumentație clasa păstrează urme de o listă de Activități de monitorizare, în scopul de a face munca lui. Această listă este utilizat pentru a coordona toate activitățile și asigurați-vă că totul funcționează fără probleme în gestionarea fluxului de activități. Există unele operațiuni care n-am privit în care să coordoneze fir și probleme de proces. În cele din urmă,
ActivityResultutilizează un nativ operațiunea -
ActivityManagerNative.getDefault().startActivity()care foloseste "Context" care ai trecut atunci când m-ai sunat pentru startActivity
. Contextul l-ai trecut in este folosit pentru a ajuta la "intenția de rezoluție", dacă este necesar. Intenția de rezoluție este procesul prin care sistemul poate determina ținta de intenție, dacă nu este furnizat. (Check out ghidul de aici pentru mai multe detalii).
Și în scopul pentru Android pentru a face acest lucru, ea are nevoie de acces la informații furnizate de "Context". Concret, sistemul are nevoie de acces la un ContentResolverastfel încât se pot "determina tipul MIME al intenție de date". În tot acest pic despre cum startActivity
face uz de context a fost un pic complicat și nu înțelege pe deplin interne mine. Principalul meu scop a fost de a ilustra cât de aplicație la nivel de resurse trebuie să fie accesate în scopul de a efectua mai multe operațiuni, care sunt esențiale pentru o aplicație. "Context" este ceea ce oferă acces la aceste resurse.
Un exemplu simplu ar putea fi punctele de Vedere. Știm cu toții ce-ai crea o imagine personalizată prin extinderea RelativeLayout
sau alt Vedere
de clasă, trebuie să furnizați un constructor care are un "Context" ca un argument. Atunci când instantia personalizate Vedere treci în context.
De ce? Deoarece punctul de Vedere trebuie să fie capabil de a avea acces la teme, resurse, și alte Vizualiza detalii de configurare.
Vedere de configurare este, de fapt, un mare exemplu. Fiecare Context a diverși parametri (câmpuri în Contextul`s implementari) care sunt stabilite de către sistemul de OPERARE în sine pentru lucruri cum ar fi dimensiune sau densitate de afișare. Este ușor pentru a vedea de ce această informație este importantă pentru crearea de Vederi, etc.
Un ultim cuvânt:
Pentru unii oameni motiv nou pentru Android (și chiar și oameni care nu atât de nou) par a uita complet de programare orientat-obiect, atunci când vine vorba de Android. Pentru unii motiv, oamenii încearcă să se aplece lor Android de dezvoltare a pre-conceput paradigme sau comportamente.
Android are propria paradigmă și un anumit model, care este de fapt destul de consistent dacă drumul de pre-conceput noțiuni și pur și simplu citiți documentația și dev ghid. Meu real punct, cu toate acestea, în timp ce "noțiuni de bază dreptul de context" poate fi uneori dificil, oamenii nejustificat de panică pentru că au fugit într-o situație în care au nevoie de context și cred că nu o au. Încă o dată, Java este un limbaj orientat-obiect cu o moștenire de design.
Ai doar "trebuie" contextul în interiorul de Activitate pentru activitatea în sine moștenește de la Context. Nu e nimic magic (cu excepția pentru toate lucrurile de OPERARE, nu de la sine pentru a seta diverși parametri și corect "configurare" din context). Deci, punând memorie/probleme de performanță o parte (de exemplu, deține referințe la contextul când nu trebuie sau să faci într-un mod care are consecințe negative asupra memoriei, etc.), Contextul este un obiect ca oricare alta și poate fi trecut în jurul valorii de la fel ca orice POJO (Plain Old Java Object).
Uneori s-ar putea nevoie pentru a face lucruri inteligente pentru a prelua acest context, dar orice clasa Java care se extinde de la nimic altceva decât Obiectul în sine poate fi scris într-un mod care are acces la context; pur și simplu expune o metodă publică care are un context și de a folosi apoi în clasă după cum este necesar. Acest lucru nu a fost conceput ca o tratare exhaustivă pe Context sau Android interne, dar sper ca e de ajutor în demistificarea Context un pic.
Contextul este un mâner în sistem; acesta oferă servicii, cum ar fi rezolvarea resurselor, obținerea accesului la bazele de date și preferințele, și așa mai departe. O aplicație Android are activități. Contextul este ca un mâner pentru mediu, cererea dumneavoastră este în curs de desfășurare în. Obiectul de activitate moștenește Contextul obiect.
Pentru mai multe informații, uita-te in Introducere în dezvoltarea Android cu Android Studio - Tutorial.
"Context" este un "interfata" la nivel mondial de informații despre un mediu de aplicație. În practică, "Context" este de fapt o abstract class, a căror aplicare este asigurată de sistemul Android.
Acesta vă permite accesul la aplicații specifice de resurse și cursuri, precum și up-solicită aplicarea la nivel de operațiuni, cum ar fi lansarea de activități, de radiodifuziune și primirea punctele, etc.
În imaginea de mai jos, puteți vedea o ierarhie de clase, în cazul în care "Context" este rădăcina clasa de această ierarhie. În special, aceasta's valoare de subliniind faptul că "Activitate" este un descendent din "Context".
Ce's Context
mai exact?
Pe Android documentația de referință, l's o entitate care reprezintă o serie de date de mediu. Acesta oferă acces la fișierele locale, baze de date, încărcătoare de clasă asociate pentru mediu, servicii (inclusiv la nivel de sistem de servicii), și mai mult. În această carte, și în dvs. de zi cu zi de codificare cu Android, ai'll vedea Contextul în trecut în jurul valorii de frecvent.
De la "Android în Practică" cartea, p. 60.
Mai multe Api-uri Android necesită un "Context" ca parametru
Dacă te uiți prin diverse Api-uri Android, va observați că multe dintre ele ia un android.conținut.Contextul` obiect ca un parametru. Veți vedea, de asemenea, că o Activitate sau un Serviciu este de obicei folosit ca un "Context". Acest lucru functioneaza pentru ambele clase se extind de la "Context".
Exemplu simplu pentru a înțelege contextul în android :
Fiecare șef are un asistent care să se uite după, să facă tot mai puțin importante și sarcinilor consumatoare de timp. Dacă un fișier sau o ceașcă de cafea este necesar, un asistent este pe fugă. Unii sefi de-abia știu ce se întâmplă în birou, așa că întreabă asistenții lor cu privire la acest lucru prea. Ei fac ceva de lucru pe ei înșiși, dar pentru cele mai multe alte lucruri de care au nevoie de ajutorul lor asistenți.
În acest scenariu,
Boss – este aplicație Android
Asistent – este contextul
Fișiere/Ceașcă de cafea – sunt resurse
Noi numim, în general, de context, atunci când avem nevoie pentru a obține informații despre diferite părți ale aplicației noastre, cum ar fi Activități, Aplicații, etc.
Unele operațiuni(lucruri care assistant este necesar) în cazul în care contextul este implicat:
Diferite modalități de context:
getContext()
getBaseContext()
getApplicationContext()
this
Un Android Context este un Interface (în sens general, nu în Java sens; în Java, "Context" este de fapt o clasă abstractă!) care permite accesul la aplicații specifice de resurse și de clasă și informații despre mediul de aplicare.
Dacă aplicația android a fost o aplicație web, context ar fi ceva similar cu ServletContext
(eu nu sunt a face o comparație exactă aici).
Activitățile și serviciile extinde, de asemenea, "Context", deci vor moșteni toate aceste metode de acces la informații de mediu în care aplicația se execută.
Ce poți face cu ea ?
Modalități de a obține context :
Doar pune-l acolo pentru începători;
Deci, în Primul rând să înțeleagă Cuvântul Context :
În limba engleză-lib. aceasta înseamnă:
"circumstanțele care formează setarea pentru un eveniment, o declarație, sau idee, și, în funcție de care aceasta poate fi înțeleasă și evaluată pe deplin."
"părți de ceva scris sau vorbit care imediat preced și urmează un cuvânt sau pasaj și de a clarifica sensul său."
Acum, ia aceeași înțelegere pentru programare lume:
contextul actual al cererii/obiect. Acesta vă permite nou-create obiecte înțelege ceea ce a fost întâmplă. De obicei te suna pentru a obține informații cu privire la o altă parte de program (activitate, pachet/cerere)
Puteți obține contextul prin invocarea getApplicationContext()
, getContext(), getBaseContext()
sau "asta" (atunci când, în clasa de activitate).
Pentru a Obține Contextul Oriunde în aplicație folosi următorul cod:
Crea noi clase AppContext
în interiorul cererea dumneavoastră android
public class AppContext extends Application {
private static Context context;
public void onCreate(){
super.onCreate();
AppContext.context = getApplicationContext();
}
public static Context getAppContext() {
return AppContext.context;
}
}
Acum, în orice moment doriți aplicarea contextul în non-clase de activitate, numim această metodă și aveți aplicația context.
Sper că acest ajutor ;)
Cred ca VM care a siled procesul aplicația sau serviciul se execută în. La siled mediu are acces la o grămadă de fond al sistemului sistemului de informații și a anumitor permise de resurse. Ai nevoie de context pentru a ajunge la aceste servicii.
Clasa pentru android.conținut.Contextul oferă conexiunea la sistemul Android și resursele proiectului. Este interfața la nivel mondial de informații despre mediul de aplicare.
Contextul, de asemenea, oferă acces la Android Servicii, de exemplu, Serviciul de Localizare.
Activități și Servicii extinde "Context" de clasă.
Contextul este Instanțe ale clasei android.conținut.Contextul oferi conexiunea la sistemul Android care execută aplicația. De exemplu, puteți verifica dimensiunea de dispozitivul curent de afișare prin Context.
De asemenea, vă oferă acces la resursele proiectului. Este interfața la nivel mondial de informații despre mediul de aplicare.
Contextul clasei, de asemenea, oferă acces la Android servicii, de exemplu, manager de alarmă pentru timpul de declanșare bazate pe evenimente.
Activități și servicii extinde Contextul clasei. Prin urmare, ele pot fi utilizate direct pentru a accesa Context.
Context este o interfață la nivel mondial de informații despre un mediu de aplicație. L's o clasă abstractă a căror aplicare este asigurată de "Android" de sistem.
"Context" permite accesul la aplicații specifice de resurse și cursuri, precum și la nivel de aplicație operațiuni, cum ar fi lansarea de activități, de radiodifuziune și primirea punctele, etc.
Aici este un Exemplu
public class MyActivity extends Activity {
public void Testing() {
Context actContext = this; /*returns the Activity Context since Activity extends Context.*/
Context appContext = getApplicationContext(); /*returns the context of the single, global Application object of the current process. */
Button BtnShowAct1 = (Button) findViewById(R.id.btnGoToAct1);
Context BtnContext = BtnShowAct1.getContext(); /*returns the context of the View. */
Pentru mai multe detalii puteti vizita http://developer.android.com/reference/android/content/Context.html
Contextul este contextul actual al cererii/obiect.As o entitate care reprezintă o serie de date de mediu . Contextul ajută activitatea curentă a interacționa cu partea mediului android ca fișiere locale, baze de date, încărcătoare de clasă asociate pentru mediu, servicii, inclusiv la nivel de sistem de servicii, și mai mult.
Contextul este un mâner la sistem . Acesta oferă servicii, cum ar fi rezolvarea resurselor, obținerea accesului la bazele de date și preferințele, și așa mai departe. O aplicație android are activități. E ca un mâner pentru mediu, cererea dumneavoastră este în curs de desfășurare în. Obiectul de activitate moștenește Contextul obiect.
Diferite invocarea de metode prin care puteți obține contextul
Contextul este practic pentru accesul la resurse și obținerea de mediu detaliile cererii(pentru aplicarea context) sau activitate (pentru activitatea de context) sau orice alte...
În scopul de a evita scurgeri de memorie ar trebui să utilizați aplicația context pentru fiecare componente, care are nevoie de un obiect de context.... pentru mai multe click aici
Context înseamnă Android pentru a cunoaște în ce activitate ar trebui să mă duc sau să acționeze în.
1 - Toast.makeText(contextul, "Introduceți Toate Detaliile", pâine Prăjită.LENGTH_SHORT).show();
este folosit în acest sens.
Contextul context = ActivityName.acest;
2 -startActivity(nou Intenție(context,LoginActivity.class));
în acest context, înseamnă activitate din care vrei să mergi la altă activitate. contextul sau ActivityName.acest lucru este mai rapid atunci , getContext și getApplicatinContext.
Vă permite să aibă o mică analogie înainte de scufundare adânc în tehnicitate din Context
Fiecare Șef are un asistent sau cineva( curier) care face mai puțin important și mai consumatoare de timp lucruri pentru el. De exemplu, dacă au aveți nevoie de un fișier sau o cafea, apoi un asistent va fi pe fugă. Seful nu va știu ce se întâmplă în fundal, dar de fișier sau sarcina va fi livrate
Deci, Aici Boss - Aplicație Android Asistent - Context Fișier sau o ceașcă de cafea - Resurse
Contextul este punctul dvs. de acces pentru aplicații legate de resurse
Las's vedem câteva dintre aceste resurse sau activități
Lansarea unei activități.
Obtinerea calea absolută la aplicații specifice cache director de pe sistemul de fișiere.
A determina dacă a dat permisiunea este permis pentru un anumit procesul și ID-ul de utilizator care rulează în sistem.
Verificarea dacă le-au fost acordate la un anumit permisiune.
Și așa mai departe. Deci, dacă o aplicație Android vrea să înceapă o activitate, se duce direct la "Context" (Punct de Acces), și "Context" clasa dă-l înapoi la resurse(Intenție în acest caz).
Ca orice altă clasă "Context" clasa prea are câmpuri și metode. Puteți explora mai multe despre "Context" în documentele oficiale, se acoperă destul de mult totul, metode disponibile, câmpuri și chiar cum să utilizați câmpuri cu metode.
Un "Context" este ceea ce majoritatea dintre noi ar numi Cerere. L's-a făcut de către sistemul Android, și este capabil să facă doar ceea ce o aplicație este în măsură să. În Tomcat, Contextul este, de asemenea, ceea ce eu aș numi-o aplicație.
Există un Context care deține mai multe Activități, fiecare Activitate poate avea mai multe puncte de Vedere.
Evident, unii vor spune că aceasta nu't se potrivesc pentru că de acest lucru sau că și ei sunt, probabil, dreptate, dar spune că Contextul este aplicația curentă va ajuta să înțelegeți ceea ce vi se pune în metoda parametri.