Hvad er en Context
-klasse i Android-programmering, og hvad bruges den til?
Jeg har læst om det på developer site, men jeg kan ikke forstå det klart.
For at sige det enkelt:
Som navnet antyder, er det konteksten for den aktuelle tilstand af programmet/objektet. Den gør det muligt for nyoprettede objekter at forstå, hvad der er foregået. Typisk kalder du den for at få oplysninger om en anden del af dit program (aktivitet og pakke/program).
Du kan få konteksten ved at påkalde getApplicationContext()
, getContext()
, getBaseContext()
eller this
(når du befinder dig i en klasse, der udvider fra Context
, f.eks. klasserne Application, Activity, Service og IntentService).
Typiske anvendelser af kontekst:
Opretning af nye objekter: Oprettelse af nye visninger, adaptere, lyttere:
TextView tv = new TextView(getContext());
ListAdapter adapter = ny SimpleCursorAdapter(getApplicationContext(), ...);
Accessing standard fælles ressourcer: Tjenester som LAYOUT_INFLATER_SERVICE, SharedPreferences:
context.getSystemService(LAYOUT_INFLATER_SERVICE)
getApplicationContext().getSharedPreferences(*name*, *mode*);
Accessing components implicitly: Vedrørende indholdsudbydere, udsendelser, hensigt
getApplicationContext().getContentResolver().query(uri, ...);
En kontekst er et håndtag til systemet; den leverer tjenester som f.eks. at opløse ressourcer, få adgang til databaser og præferencer osv. En Android-app har aktiviteter. Context er som et håndtag til det miljø, som din applikation kører i øjeblikket. Aktivitetsobjektet arver Context-objektet.
Du kan finde flere oplysninger i Introduktion til Android-udvikling med Android Studio - Tutorial.
En Android Context er en Interface (i generel forstand, ikke i Java-sammenhæng; i Java er Context
faktisk en abstrakt klasse!), der giver adgang til applikationsspecifikke ressourcer og klasser og oplysninger om applikationsmiljøet.
Hvis din android-app var en web-app, ville din kontekst være noget, der ligner ServletContext
(jeg foretager ikke en nøjagtig sammenligning her).
Dine aktiviteter og tjenester udvider også Context
, så de arver alle disse metoder til at få adgang til de miljøoplysninger, som appen kører i.