Was ist "Kontext" auf Android?

1969

Was genau ist eine ContextKlasse in der Android-Programmierung und wofür wird sie verwendet?

Ich habe auf der Entwicklerseite darüber gelesen, kann es aber nicht klar verstehen.

Brigadegeneral
quelle
16
Im Zusammenhang mit dieser Frage
Christopher Perry

Antworten:

1507

Einfach ausgedrückt:

Wie der Name schon sagt, ist dies der Kontext des aktuellen Status der Anwendung / des Objekts. Damit können neu erstellte Objekte verstehen, was passiert ist. Normalerweise rufen Sie es auf, um Informationen zu einem anderen Teil Ihres Programms (Aktivität und Paket / Anwendung) zu erhalten.

Sie können den Kontext erhalten durch den Aufruf getApplicationContext(), getContext(), getBaseContext()oder this(wenn in einer Klasse , die aus erstreckt Context, wie die Anwendung, Aktivität, Dienstleistung und IntentService Klassen).

Typische Verwendungen des Kontexts:

  • Neue Objekte erstellen: Neue Ansichten, Adapter, Listener erstellen:

    TextView tv = new TextView(getContext());
    ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
  • Zugriff auf allgemeine Standardressourcen : Dienste wie LAYOUT_INFLATER_SERVICE, SharedPreferences:

    context.getSystemService(LAYOUT_INFLATER_SERVICE)
    getApplicationContext().getSharedPreferences(*name*, *mode*);
  • Impliziter Zugriff auf Komponenten : In Bezug auf Inhaltsanbieter, Broadcasts, Absichten

    getApplicationContext().getContentResolver().query(uri, ...);
Sameer Segal
quelle
51
context.getSystemService(LAYOUT_INFLATER_SERVICE)Wo und wie wird in Ihrem Beispiel contextdefiniert?
Dennis
8
Es wird gut erklärt, warum wir beim dynamischen Erstellen einer Textansicht Kontext benötigen. Beim dynamischen Erstellen von Arrays von Textansichten müssen wir jedoch keinen Kontext erwähnen. Warum ist das so ? TextView [] textview = new TextView [10];
Abhinav Arora
38
@AbhinavArora Wenn Sie das Array definieren, erstellen Sie keine Instanz von Textansichten (Sie erstellen im Grunde nur den Platz, in den sie gehen können). An dem Punkt, an dem Sie Werte in dieses Array einfügen, benötigen Sie entweder vorab erstellte Textansichten oder einen Kontext, mit dem Sie sie erstellen können.
Mc1arke
24
Warum brauchen Ansichten Kontext? Was könnte TextView beispielsweise nicht tun, wenn es keinen Kontext hätte?
Dinosaurier
15
Ein Code ohne "Kontext" kann auf jedem Betriebssystem mit JVM ausgeführt werden. Wenn es jedoch einen Kontext gibt, sollte dieser unter Android ausgeführt werden. Wenn Sie Android-spezifische Dinge verwenden möchten (Zugriff auf den Gerätestandort, Aufnehmen eines Fotos, Ausführen eines Hintergrunddienstes usw.), benötigen Sie einen Kontext, den Sie jedoch nicht benötigen, wenn Sie einen erstellen http Anfrage. Der Kontext kann als Brücke zwischen Java und Android angenommen werden.
Faruk Toptas
508

Definition des Kontextes

  • Der Kontext repräsentiert Umgebungsdaten
  • Es bietet Zugriff auf Dinge wie Datenbanken

Einfachere Begriffe (Beispiel 1)

  • Betrachten Sie Person-X ist der CEO eines Start-up-Software-Unternehmens.

  • Es ist ein leitender Architekt im Unternehmen anwesend. Dieser leitende Architekt erledigt alle Arbeiten im Unternehmen, einschließlich Datenbank, Benutzeroberfläche usw.

  • Jetzt stellt der CEO einen neuen Entwickler ein.

  • Es ist der Architekt, der die Verantwortung der neu eingestellten Person anhand der Fähigkeiten der neuen Person mitteilt, ob sie an einer Datenbank oder einer Benutzeroberfläche usw. arbeiten wird.

Einfachere Begriffe (Beispiel 2)

  • Es ist wie der Zugriff von Android-Aktivitäten auf die App-Ressource.

  • Es ist ähnlich wie wenn Sie ein Hotel besuchen, Sie möchten Frühstück, Mittag- und Abendessen zu den richtigen Zeiten, oder?

  • Es gibt viele andere Dinge, die Sie während Ihres Aufenthalts mögen. Wie bekommst du diese Dinge?

  • Sie bitten den Zimmerservice, diese Dinge für Sie mitzubringen.

  • Hier ist die Person vom Zimmerservice der Kontext, wenn man bedenkt, dass Sie die einzige Aktivität sind und das Hotel Ihre App ist. Schließlich müssen Frühstück, Mittag- und Abendessen die Ressourcen sein.


Dinge, die Kontext beinhalten, sind:

  1. Laden einer Ressource.
  2. Neue Aktivität starten.
  3. Ansichten erstellen.
  4. Systemdienst erhalten.

Der Kontext ist die Basisklasse für Aktivität , Service , Anwendung usw.

Eine andere Möglichkeit, dies zu beschreiben: Betrachten Sie den Kontext als entfernt von einem Fernseher und den Kanälen im Fernseher sind Ressourcen, Dienste, Absichten usw. - - - Hier fungiert die Fernbedienung als Zugriff, um Zugriff auf alle verschiedenen Ressourcen in den Vordergrund zu bekommen.

  • Remote hat also Zugriff auf Kanäle wie Ressourcen, Dienste, Absichten usw.

  • Ebenso ... Wer Zugriff auf Remote hat, hat natürlich Zugriff auf alle Dinge wie Ressourcen, Dienste, Absichten usw.


Verschiedene Methoden, mit denen Sie Kontext erhalten können

  • getApplicationContext()
  • getContext()
  • getBaseContext()
  • oder this(wenn in der Aktivitätsklasse)

Beispiel:

TextView tv = new TextView(this);

Das Schlüsselwort thisbezieht sich auf den Kontext der aktuellen Aktivität.

Devrath
quelle
3
Ok, die von der Aktivität abgeleitete Klasse ist also selbst ein Kontext. Deshalb übergeben wir den Kontext, indem wir dies an die neu erstellten Ansichten übergeben.
0leg
7
Ich frage mich, ob es eine gute Designentscheidung ist, den Kontext von so vielen verschiedenen Orten aus zugänglich zu machen. Ein statischer getContext () in der Anwendung hätte meiner Meinung nach gereicht.
Trilarion
@Trilarion ... Es hängt davon ab , wie Sie wollen Kontext verwenden getApplicationContext(), getContext(), getBaseContext()..... Siehe this -> ( stackoverflow.com/a/10641257 )
Devrath
Nur um das letzte Stück mit dem Erstellen einer Textansicht zu erweitern: In einigen Fällen kann es erforderlich sein, aufzurufen SomeActivityName.this. In einem Thread thisbezieht sich eine Instanz auf den Thread und nicht auf die Aktivität
Zoe
1
Ist das Kontextobjekt für ein Apk- oder Android-Betriebssystem eindeutig? Kann eine Anwendung zwei verschiedene Kontexte haben?
Valijon
367

Quelle


Das Thema Kontext in Android scheint für viele verwirrend zu sein. Die Leute wissen nur, dass der Kontext ziemlich oft benötigt wird, um grundlegende Dinge in Android zu tun. Menschen geraten manchmal in Panik, weil sie versuchen, eine Operation auszuführen, die den Kontext erfordert, und sie wissen nicht, wie sie den richtigen Kontext „erhalten“ können. Ich werde versuchen, die Idee des Kontexts in Android zu entmystifizieren. Eine vollständige Behandlung des Problems würde den Rahmen dieses Beitrags sprengen, aber ich werde versuchen, einen allgemeinen Überblick zu geben, damit Sie einen Eindruck davon bekommen, was Kontext ist und wie Sie ihn verwenden. Um zu verstehen, was Kontext ist, werfen wir einen Blick auf den Quellcode:

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/Context.java

Was genau ist Kontext?

Nun, die Dokumentation selbst bietet eine recht einfache Erklärung: Die Context-Klasse ist eine „Schnittstelle zu globalen Informationen über eine Anwendungsumgebung“.

Die Context-Klasse selbst wird als abstrakte Klasse deklariert, deren Implementierung vom Android-Betriebssystem bereitgestellt wird. Die Dokumentation sieht ferner vor, dass der Kontext „… den Zugriff auf anwendungsspezifische Ressourcen und Klassen sowie Aufrufe für Vorgänge auf Anwendungsebene wie das Starten von Aktivitäten, das Senden und Empfangen von Absichten usw. ermöglicht“.

Sie können jetzt sehr gut verstehen, warum der Name Kontext ist. Es ist, weil es nur das ist. Der Kontext stellt, wenn Sie so wollen, den Link oder Hook für eine Aktivität, einen Dienst oder eine andere Komponente bereit und verknüpft ihn so mit dem System, wodurch der Zugriff auf die globale Anwendungsumgebung ermöglicht wird. Mit anderen Worten: Der Kontext bietet die Antwort auf die Frage der Komponenten: "Wo zum Teufel bin ich in Bezug auf die App im Allgemeinen und wie kann ich auf den Rest der App zugreifen / mit ihr kommunizieren?" Wenn dies alles etwas verwirrend erscheint, liefert ein kurzer Blick auf die von der Context-Klasse bereitgestellten Methoden einige weitere Hinweise auf ihre wahre Natur.

Hier ist eine zufällige Auswahl dieser Methoden:

  1. getAssets()
  2. getResources()
  3. getPackageManager()
  4. getString()
  5. getSharedPrefsFile()

Was haben all diese Methoden gemeinsam? Sie alle ermöglichen es jedem, der Zugriff auf den Kontext hat, auf anwendungsweite Ressourcen zuzugreifen.

Mit anderen Worten, der Kontext verknüpft die Komponente, auf die verwiesen wird, mit dem Rest der Anwendungsumgebung. Die Assets (denken Sie an den Ordner '/ assets' in Ihrem Projekt) sind beispielsweise in der gesamten Anwendung verfügbar, vorausgesetzt, eine Aktivität, ein Dienst oder was auch immer weiß, wie auf diese Ressourcen zugegriffen werden kann. Gleiches gilt für getResources()die Möglichkeit, Dinge zu tun, getResources().getColor()die Sie in die colors.xmlRessource einbinden (egal, dass aapt den Zugriff auf Ressourcen über Java-Code ermöglicht, das ist ein separates Problem).

Das Ergebnis ist , dass Contextist das, was den Zugriff auf Systemressourcen ermöglicht und dessen , was hakt Komponenten in die „größere app“. Schauen wir uns die Unterklassen Context, die Klassen , die die Umsetzung der abstrakten bieten ContextKlasse. Die naheliegendste Klasse der ist ActivityKlasse. ActivityInherits aus ContextThemeWrapper, die erbt von ContextWrapper, die erbt von Contextselbst. diese Klassen nützlich sind , zu sehen Dinge auf einer tieferen Ebene zu verstehen, aber ausreichend für die jetzt zu wissen , dass es ist ContextThemeWrapperund ContextWrappersind so ziemlich wie sie klingen. sie die abstrakten Elemente des Gerätes ContextKlasse selbst, indem Sie einen Kontext (den tatsächlichen Kontext) "umschließen" und diese Funktionen an diesen Kontext delegieren. Ein Beispiel ist hilfreich - in derContextWrapperKlasse, die abstrakte Methode getAssetsaus der ContextKlasse wird wie folgt implementiert:

@Override
    public AssetManager getAssets() {
        return mBase.getAssets();
    }

mBaseist einfach ein Feld, das vom Konstruktor auf einen bestimmten Kontext festgelegt wird. Daher wird ein Kontext umbrochen und die ContextWrapperImplementierung der Methode getAssets an diesen Kontext delegiert. Kommen wir zurück zur Untersuchung der ActivityKlasse, von der letztendlich geerbt wird, um Contextzu sehen, wie dies alles funktioniert.

Sie wissen wahrscheinlich, was eine Aktivität ist, aber zu überprüfen - es ist im Grunde eine einzige Sache, die der Benutzer tun kann. Es wird ein Fenster bereitgestellt, in dem die Benutzeroberfläche platziert werden kann, mit der der Benutzer interagiert. Entwickler, die mit anderen APIs vertraut sind, und sogar Nicht-Entwickler, können dies im Volksmund als „Bildschirm“ betrachten. Das ist technisch ungenau, aber für unsere Zwecke spielt es keine Rolle. Wie tun Activityund Contextinteragieren und was genau läuft in ihrer Vererbungsbeziehung ab?

Auch hier ist es hilfreich, sich bestimmte Beispiele anzusehen. Wir alle wissen, wie man Aktivitäten startet. Vorausgesetzt, Sie haben „den Kontext“, von dem aus Sie die Aktivität starten, rufen Sie einfach an startActivity(intent), wobei die Absicht den Kontext beschreibt, von dem aus Sie eine Aktivität starten, und die Aktivität, die Sie starten möchten. Das ist das Vertraute startActivity(this, SomeOtherActivity.class).

Und was ist this? thisist Ihre Aktivität, weil die ActivityKlasse von erbt Context. Die vollständige Übersicht lautet wie folgt: Wenn Sie aufrufen startActivity, Activityführt die Klasse letztendlich Folgendes aus:

Instrumentation.ActivityResult ar =
                mInstrumentation.execStartActivity(
                    this, mMainThread.getApplicationThread(), mToken, this,
                    intent, requestCode);

Also nutzt es das execStartActivityaus der InstrumentationKlasse (eigentlich aus einer inneren Klasse in Instrumentationaufgerufen ActivityResult).

An diesem Punkt bekommen wir einen Blick auf die Systeminternalen.

Hier kümmert sich das Betriebssystem eigentlich um alles. Wie startet Instrumentation die Aktivität genau? Nun, der Parameter thisin der execStartActivityobigen Methode ist Ihre Aktivität, dh der Kontext, und der execStartActivitynutzt diesen Kontext.

Eine Übersicht von 30.000 ist folgende: Die Instrumentation-Klasse verfolgt eine Liste von Aktivitäten, die sie überwacht, um ihre Arbeit zu erledigen. Diese Liste wird verwendet, um alle Aktivitäten zu koordinieren und sicherzustellen, dass bei der Verwaltung des Aktivitätsflusses alles reibungslos funktioniert.

Es gibt einige Operationen, bei denen ich mich nicht vollständig mit den Koordinaten-Thread- und Prozessproblemen befasst habe. Letztendlich ActivityResultverwendet das eine native Operation - die ActivityManagerNative.getDefault().startActivity()die verwendet, die ContextSie beim Aufruf übergeben haben startActivity. Der Kontext, den Sie übergeben haben, wird bei Bedarf zur Unterstützung der „Vorsatzlösung“ verwendet. Die Absichtsauflösung ist der Prozess, mit dem das System das Ziel der Absicht bestimmen kann, wenn es nicht bereitgestellt wird. (Weitere Informationen finden Sie in der Anleitung hier).

Damit Android dies tun kann, muss es Zugriff auf Informationen haben, die von bereitgestellt werden Context. Insbesondere muss das System auf a zugreifen, ContentResolverdamit es „den MIME-Typ der Intent-Daten bestimmen kann“. Diese ganze Frage, wie startActivityder Kontext verwendet wird, war etwas kompliziert und ich verstehe die Interna selbst nicht vollständig. Mein Hauptpunkt diente nur der Veranschaulichung, wie auf anwendungsweite Ressourcen zugegriffen werden muss, um viele der für eine App wesentlichen Vorgänge auszuführen. ContextDies ermöglicht den Zugriff auf diese Ressourcen. Ein einfacheres Beispiel könnten Ansichten sein. Wir alle wissen, was Sie erstellen Benutzerdefinierte Ansicht durch Erweitern RelativeLayoutoder eine andere ViewKlasse müssen Sie einen Konstruktor bereitstellen, der a akzeptiertContextals Argument. Wenn Sie Ihre benutzerdefinierte Ansicht instanziieren, übergeben Sie den Kontext. Warum? Weil die Ansicht Zugriff auf Themen, Ressourcen und andere Konfigurationsdetails der Ansicht haben muss. Die Ansichtskonfiguration ist eigentlich ein gutes Beispiel. Jeder Kontext verfügt über verschiedene Parameter (Felder in Contextden Implementierungen), die vom Betriebssystem selbst für Dinge wie die Dimension oder Dichte der Anzeige festgelegt werden. Es ist leicht zu erkennen, warum diese Informationen für das Einrichten von Ansichten usw. wichtig sind.

Ein letztes Wort: Aus irgendeinem Grund scheinen Leute, die neu in Android sind (und sogar Leute, die nicht so neu sind), die objektorientierte Programmierung in Bezug auf Android völlig zu vergessen. Aus irgendeinem Grund versuchen die Leute, ihre Android-Entwicklung an vorgefertigte Paradigmen oder erlernte Verhaltensweisen anzupassen.

Android hat ein eigenes Paradigma und ein bestimmtes Muster, das tatsächlich ziemlich konsistent ist, wenn Sie Ihre vorgefertigten Vorstellungen loslassen und einfach die Dokumentation und den Entwicklungsleitfaden lesen. Mein eigentlicher Punkt ist jedoch, dass es manchmal schwierig sein kann, den richtigen Kontext zu finden. Menschen geraten jedoch zu Unrecht in Panik, weil sie in eine Situation geraten, in der sie den Kontext brauchen und glauben, ihn nicht zu haben. Auch hier ist Java eine objektorientierte Sprache mit einem Vererbungsdesign.

Sie haben den Kontext nur in Ihrer Aktivität, weil Ihre Aktivität selbst vom Kontext erbt. Es gibt keine Magie (außer all dem, was das Betriebssystem selbst tut, um verschiedene Parameter einzustellen und Ihren Kontext richtig zu „konfigurieren“). Wenn Sie also Speicher- / Leistungsprobleme beiseite lassen (z. B. Verweise auf den Kontext, wenn Sie dies nicht benötigen, oder dies auf eine Weise tun, die negative Auswirkungen auf den Speicher hat usw.), ist der Kontext ein Objekt wie jedes andere und kann weitergegeben werden genau wie jedes POJO (Plain Old Java Object). Manchmal müssen Sie möglicherweise clevere Dinge tun, um diesen Kontext abzurufen, aber jede reguläre Java-Klasse, die sich von nichts anderem als Object selbst erstreckt, kann so geschrieben werden, dass sie Zugriff auf den Kontext hat. Stellen Sie einfach eine öffentliche Methode bereit, die einen Kontext verwendet, und verwenden Sie sie dann nach Bedarf in dieser Klasse.

Sourab Sharma
quelle
33
Dies ist eine ausgezeichnete Antwort. Viel besser als die akzeptierte, die nur sagt, was jeder intuitiv weiß.
Honza Kalfus
5
Dies ist die lange Antwort, die Sie suchen! gut erklärt
Nick Jian
4
Ausgezeichnete ans! Ernsthaft !
Zeekhuge
3
Hmmm, für mich klingt alles so, wie wir Oldtimer es benutzt haben, um globale Variablen aufzurufen, was sehr verpönt war, als die Objektorientierung die Szene betrat. 8-)
Ulf Edholm
Ist der Kontext, den ich von getApplicationContext erhalte, der gleiche wie getContext in Activity?
JPM
120

Ein Kontext ist ein Handle für das System. Es bietet Dienste wie das Auflösen von Ressourcen, den Zugriff auf Datenbanken und Einstellungen usw. Eine Android-App hat Aktivitäten. Der Kontext ist wie ein Handle für die Umgebung, in der Ihre Anwendung gerade ausgeführt wird. Das Aktivitätsobjekt erbt das Kontextobjekt.

Weitere Informationen finden Sie unter Einführung in die Android-Entwicklung mit Android Studio - Tutorial .

wütendITguy
quelle
89

Contextist eine "Schnittstelle" zu den globalen Informationen über eine Anwendungsumgebung. In der Praxis Contextist eigentlich eine abstrakte Klasse , deren Implementierung vom Android-System bereitgestellt wird.

Es ermöglicht den Zugriff auf anwendungsspezifische Ressourcen und Klassen sowie das Aufrufen von Vorgängen auf Anwendungsebene, z. B. Starten von Aktivitäten, Senden und Empfangen von Absichten usw.

In der folgenden Abbildung sehen Sie eine Hierarchie von Klassen, wobei Contextsich die Stammklasse dieser Hierarchie befindet. Insbesondere ist hervorzuheben, dass Activityes sich um einen Nachkommen von handelt Context.

Aktivitätsdiagramm

Dmytro Danylyk
quelle
Wie ist dieses Foto entstanden?
d0ye
70

Was Contextgenau ist?

Gemäß der Android-Referenzdokumentation handelt es sich um eine Entität, die verschiedene Umgebungsdaten darstellt. Es bietet Zugriff auf lokale Dateien, Datenbanken, Klassenlader, die der Umgebung zugeordnet sind, Dienste (einschließlich Dienste auf Systemebene) und mehr. In diesem Buch und in Ihrer täglichen Codierung mit Android wird der Kontext häufig weitergegeben.

Aus dem " Android in der Praxis Buch ", S. 22. 60.

Für mehrere Android-APIs ist a erforderlich Context as-Parameter

Wenn Sie sich die verschiedenen Android-APIs ansehen, werden Sie feststellen, dass viele von ihnen ein android.content.ContextObjekt als Parameter verwenden. Sie werden auch sehen, dass eine Aktivität oder ein Dienst normalerweise als verwendet wird Context. Dies funktioniert, da sich beide Klassen von erstrecken Context.

s0ld13r
quelle
52

Einfaches Beispiel, um contextin Android zu verstehen :

Jeder Chef hat einen Assistenten, der sich um alle weniger wichtigen und zeitaufwändigen Aufgaben kümmert. Wenn eine Datei oder eine Tasse Kaffee benötigt wird, ist ein Assistent auf der Flucht. Einige Chefs wissen kaum, was im Büro los ist, deshalb fragen sie auch ihre Assistenten. Sie erledigen einige Arbeiten selbst, aber für die meisten anderen Dinge benötigen sie die Hilfe ihrer Assistenten.

In diesem Szenario,

Boss - ist die Android-Anwendung

Assistent - ist Kontext

Dateien / Tasse Kaffee - sind Ressourcen

Wir rufen im Allgemeinen den Kontext auf, wenn wir Informationen zu verschiedenen Teilen unserer Anwendung wie Aktivitäten, Anwendungen usw. benötigen.

Einige Operationen (Dinge, bei denen der Assistent benötigt wird), bei denen es um den Kontext geht:

  • Laden gemeinsamer Ressourcen
  • Dynamische Ansichten erstellen
  • Anzeigen von Toastnachrichten
  • Starten von Aktivitäten usw.

Verschiedene Möglichkeiten, um Kontext zu erhalten:

getContext()

getBaseContext()

getApplicationContext()

this
Parsania Hardik
quelle
47

Ein Android- Kontext ist eine Schnittstelle (im allgemeinen Sinne, nicht im Java-Sinne; in JavaContext ist es tatsächlich eine abstrakte Klasse!), Die den Zugriff auf anwendungsspezifische Ressourcen sowie Klassen und Informationen zur Anwendungsumgebung ermöglicht.

Wenn Ihre Android-App eine Web-App wäre, wäre Ihr Kontext ähnlich wie ServletContext (ich mache hier keinen genauen Vergleich).

Ihre Aktivitäten und Dienste werden ebenfalls erweitert Context, sodass sie alle diese Methoden erben, um auf die Umgebungsinformationen zuzugreifen, in denen die App ausgeführt wird.

Naikus
quelle
35
  • Context stellt ein Handle zum Abrufen von Umgebungsdaten dar.
  • Context Klasse selbst wird als abstrakt deklariert, deren Implementierung vom Android-Betriebssystem bereitgestellt wird.
  • Context ist wie fern von einem Fernseher & Kanal im Fernseher sind Ressourcen, Dienste usw. Geben Sie hier die Bildbeschreibung ein

Was kannst du damit machen?

  • Ressource laden.
  • Neue Aktivität starten.
  • Ansichten erstellen.
  • Systemdienst erhalten.

Möglichkeiten, um Kontext zu erhalten:

  • getApplicationContext()
  • getContext()
  • getBaseContext()Geben Sie hier die Bildbeschreibung einGeben Sie hier die Bildbeschreibung ein
Nilesh Rathod
quelle
18

Stellen Sie es einfach für Neulinge heraus;

Verstehe also zuerst den Wortkontext:

In englisch-lib. es bedeutet:

"Die Umstände, die den Rahmen für ein Ereignis, eine Aussage oder eine Idee bilden und anhand derer sie vollständig verstanden und bewertet werden können."

"Die Teile von etwas Geschriebenem oder Gesprochenem, die unmittelbar vor und nach einem Wort oder einer Passage stehen und deren Bedeutung klarstellen."

Nehmen Sie jetzt das gleiche Verständnis für die Programmierwelt:

Kontext des aktuellen Status der Anwendung / des Objekts. Damit können neu erstellte Objekte verstehen, was passiert ist. Normalerweise rufen Sie es auf, um Informationen zu einem anderen Teil Ihres Programms (Aktivität, Paket / Anwendung) zu erhalten.

Sie können den Kontext erhalten durch den Aufruf getApplicationContext(), getContext(), getBaseContext()oder this(wenn sie in der Aktivitätsklasse).

Verwenden Sie den folgenden Code, um den Kontext überall in der Anwendung abzurufen:

Erstellen Sie eine neue Klasse AppContextin Ihrer Android-Anwendung

public class AppContext extends Application {

    private static Context context;

    public void onCreate(){
        super.onCreate();
        AppContext.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return AppContext.context;
    }
}

Wenn Sie jetzt einen Anwendungskontext in einer Nicht-Aktivitätsklasse wünschen, rufen Sie diese Methode auf und Sie haben einen Anwendungskontext.

Ich hoffe das hilft ;)

star18bit
quelle
17

Stellen Sie sich das als die VM vor, die den Prozess, in dem die App oder der Dienst ausgeführt wird, isoliert hat. Die isolierte Umgebung hat Zugriff auf eine Reihe zugrunde liegender Systeminformationen und bestimmte zulässige Ressourcen. Sie benötigen diesen Kontext, um zu diesen Diensten zu gelangen.

Erol
quelle
17

Der Kontext ist ein Verweis auf das aktuelle Objekt. Der Kontext ermöglicht auch den Zugriff auf Informationen zur Anwendungsumgebung.

devdas
quelle
13

Die Klasse android.content.Contextstellt die Verbindung zum Android-System und den Ressourcen des Projekts bereit. Es ist die Schnittstelle zu globalen Informationen über die Anwendungsumgebung.

Der Kontext bietet auch Zugriff auf Android-Dienste, z. B. den Standortdienst.

Aktivitäten und Dienstleistungen erweitern die ContextKlasse.

Yashvir Yadav
quelle
9

Kontext ist Instanzen der Klasse android.content.Context stellen die Verbindung zum Android-System her, das die Anwendung ausführt. Sie können beispielsweise die Größe der aktuellen Geräteanzeige über den Kontext überprüfen.

Es gibt auch Zugriff auf die Ressourcen des Projekts. Es ist die Schnittstelle zu globalen Informationen über die Anwendungsumgebung.

Die Context-Klasse bietet auch Zugriff auf Android-Dienste, z. B. den Alarmmanager, um zeitbasierte Ereignisse auszulösen.

Aktivitäten und Dienste erweitern die Context-Klasse. Daher können sie direkt verwendet werden, um auf den Kontext zuzugreifen.

Chandan Kumar
quelle
9

Der Kontext ist eine Schnittstelle zu globalen Informationen über eine Anwendungsumgebung. Es ist eine abstrakte Klasse, deren Implementierung vom AndroidSystem bereitgestellt wird .

Context ermöglicht den Zugriff auf anwendungsspezifische Ressourcen und Klassen sowie Aufrufe für Vorgänge auf Anwendungsebene wie z launching activities, broadcasting and receiving intents, etc.

Hier ist ein Beispiel

 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. */

Weitere Informationen finden Sie unter http://developer.android.com/reference/android/content/Context.html

IntelliJ Amiya
quelle
8

Der Kontext dient im Wesentlichen dem Ressourcenzugriff und dem Abrufen der Umgebungsdetails der Anwendung (für den Anwendungskontext) oder der Aktivität (für den Aktivitätskontext) oder einer anderen ...

Um Speicherverluste zu vermeiden, sollten Sie den Anwendungskontext für alle Komponenten verwenden, die ein Kontextobjekt benötigen. Weitere Informationen finden Sie hier

Jaber Shabeek
quelle
8

Der Kontext ist der Kontext des aktuellen Status der Anwendung / des Objekts. Es handelt sich um eine Entität, die verschiedene Umgebungsdaten darstellt. Der Kontext unterstützt die aktuelle Aktivität bei der Interaktion mit externen Android-Umgebungen wie lokalen Dateien, Datenbanken, mit der Umgebung verknüpften Klassenladeprogrammen, Diensten einschließlich Diensten auf Systemebene und mehr.

Ein Kontext ist ein Handle für das System. Es bietet Dienste wie das Auflösen von Ressourcen, den Zugriff auf Datenbanken und Einstellungen usw. Eine Android-App hat Aktivitäten. Es ist wie ein Handle für die Umgebung, in der Ihre Anwendung gerade ausgeführt wird. Das Aktivitätsobjekt erbt das Kontextobjekt.

Verschiedene aufrufende Methoden, mit denen Sie den Kontext abrufen können 1. getApplicationContext (), 2. getContext (), 3. getBaseContext () 4. oder dies (in der Aktivitätsklasse).

Santoshpatmca
quelle
7

Kontext bedeutet, dass Android erfährt, für welche Aktivität ich mich entscheiden oder handeln soll.

1 - Toast.makeText(context, "Enter All Details", Toast.LENGTH_SHORT).show(); es verwendet in diesem. Context context = ActivityName.this;

2 -startActivity(new Intent(context,LoginActivity.class));

bedeutet in diesem Zusammenhang, von welcher Aktivität aus Sie zu einer anderen Aktivität wechseln möchten. context oder ActivityName.this ist schneller als getContext und getApplicatinContext.

Deven
quelle
6

A Contextwürden die meisten von uns als Anwendung bezeichnen . Es wird vom Android-System erstellt und kann nur das tun, was eine Anwendung kann. In Tomcat ist ein Kontext auch das, was ich als Anwendung bezeichnen würde.

Es gibt einen Kontext, der viele Aktivitäten enthält. Jede Aktivität kann viele Ansichten haben.

Offensichtlich werden einige sagen, dass es aus diesem oder jenem Grund nicht passt, und sie haben wahrscheinlich Recht, aber wenn Sie sagen, dass ein Kontext Ihre aktuelle Anwendung ist, können Sie besser verstehen, was Sie in Methodenparameter eingeben.

Nicolas Zozol
quelle
6

Boss Assistant Analogie

Lassen Sie uns eine kleine Analogie haben, bevor wir tief in die Technik des Kontexts eintauchen

Jeder Chef hat einen Assistenten oder jemanden (Laufbursche), der weniger wichtige und zeitaufwändigere Dinge für ihn erledigt. Wenn sie beispielsweise eine Datei oder einen Kaffee benötigen, wird ein Assistent ausgeführt. Boss wird nicht wissen, was im Hintergrund vor sich geht, aber die Datei oder die Aufgabe wird geliefert

Also hier
Boss - Android Application
Assistant - Kontextdatei
oder eine Tasse Kaffee - Ressource

Was die offizielle Android Developer Site über Context sagt

Der Kontext ist Ihr Zugangspunkt für anwendungsbezogene Ressourcen

Sehen wir uns einige dieser Ressourcen oder Aufgaben an

  • Eine Aktivität starten.

  • Abrufen des absoluten Pfads zum anwendungsspezifischen Cache-Verzeichnis im Dateisystem.

  • Festlegen, ob die angegebene Berechtigung für einen bestimmten Prozess und eine bestimmte Benutzer-ID zulässig ist, die im System ausgeführt werden.

  • Überprüfen, ob Ihnen eine bestimmte Berechtigung erteilt wurde.

Und so weiter.
Wenn eine Android-Anwendung eine Aktivität starten möchte, geht sie direkt zu Context(Access Point), und die ContextKlasse gibt ihm die Ressourcen zurück (in diesem Fall beabsichtigt).

Wie jede andere Klassenklasse hat auch diese ContextKlasse Felder und Methoden.
Weitere Informationen finden Sie Contextin der offiziellen Dokumentation. Sie behandelt so ziemlich alles, verfügbare Methoden, Felder und sogar die Verwendung von Feldern mit Methoden.

Rohit Singh
quelle
Danke für Heads Up @dhssa. Ich habe versucht, den Kern der Android-Dokumente bereitzustellen. Shoul war vorsichtiger. Der "kopierte" Teil wurde entfernt
Rohit Singh
5

Instanzen der Klasse android.content.Context stellen die Verbindung zum Android-System her, das die Anwendung ausführt. Sie können beispielsweise die Größe der aktuellen Geräteanzeige über den Kontext überprüfen.

Es gibt auch Zugriff auf die Ressourcen des Projekts. Es ist die Schnittstelle zu globalen Informationen über die Anwendungsumgebung.

Die Context-Klasse bietet auch Zugriff auf Android-Dienste, z. B. den Alarmmanager, um zeitbasierte Ereignisse auszulösen.

Aktivitäten und Dienste erweitern die Context-Klasse. Daher können sie direkt verwendet werden, um auf den Kontext zuzugreifen.

Mubarak
quelle
4

Wenn Sie Context mit anderen bekannten Klassen in Android verbinden möchten, beachten Sie diese Struktur:

Context <ContextWrapper <Anwendung

Context <ContextWrapper <ContextThemeWrapper <Aktivität

Context <ContextWrapper <ContextThemeWrapper <Activity <ListActivity

Context <ContextWrapper <Dienst

Context <ContextWrapper <Service <IntentService

Alle diese Klassen sind also auf ihre Weise Kontexte. Wenn Sie möchten, können Sie Service und ListActivity in den Kontext umwandeln . Wenn Sie genau hinschauen, erben einige Klassen auch das Thema. In Aktivitäten oder Fragmenten möchten Sie, dass das Theming auf Ihre Ansichten angewendet wird, aber es interessiert Sie beispielsweise nicht für die Serviceklasse .

Ich erkläre den Unterschied in Kontexten hier .

Lomza
quelle
4

Einfach ausgedrückt Contextist Androids ein Chaos, das Sie nicht lieben werden, bis Sie aufhören, sich Sorgen zu machen.

Android Contexts sind:

  • Gott-Objekte.

  • Sie möchten Ihre gesamte Anwendung weitergeben, wenn Sie mit der Entwicklung für Android beginnen, dies jedoch vermeiden, wenn Sie sich dem Programmieren, Testen und Android selbst ein wenig nähern.

    • Unklare Abhängigkeit.

    • Häufige Ursache für Speicherlecks.

    • PITA zum Testen.

  • Tatsächlicher Kontext, der vom Android-System zum Versenden von Berechtigungen, Ressourcen, Einstellungen, Diensten, Sendungen, Stilen, Anzeigen von Dialogen und Aufblähen des Layouts verwendet wird. Und Sie benötigen unterschiedliche ContextInstanzen für einige separate Dinge (offensichtlich können Sie keinen Dialog aus einem Anwendungs- oder Dienstkontext anzeigen; Layouts, die aus Anwendungs- und Aktivitätskontexten aufgeblasen wurden, können unterschiedlich sein).

Pavlus
quelle
4

Der Kontext ist die androidspezifische API für die Sandbox jeder App , die private Daten der Zugriffs-App wie Ressourcen, Datenbank, private Dateiverzeichnisse, Einstellungen, Einstellungen ... bereitstellt.

Die meisten Privatedata sind für alle Aktivitäten / Dienste / Broadcastlistener einer Anwendung gleich.

Da Application, Activity, Service die Context-Schnittstelle implementieren, können sie verwendet werden, wenn ein API-Aufruf einen Context-Parameter benötigt

k3b
quelle
4

Contextbedeutet Komponente (oder Anwendung) in verschiedenen Zeiträumen. Wenn ich zwischen 13 und 14 Uhr so ​​viele Lebensmittel esse, wird mein damaliger Kontext verwendet, um auf alle Methoden (oder Ressourcen) zuzugreifen, die ich während dieser Zeit verwende. Inhalt ist eine Komponente (Anwendung) für eine bestimmte Zeit. ContextDie Anzahl der Anwendungskomponenten ändert sich ständig basierend auf dem zugrunde liegenden Lebenszyklus der Komponenten oder der Anwendung. Zum Beispiel innerhalb von onCreate () eines Activity,

getBaseContext()- gibt das contextan Activity, was vom Konstruktor der Aktivität festgelegt (erstellt) wird. getApplicationContext()- gibt das ContextSetup (erstellt) während der Erstellung der Anwendung.

Hinweis: <application>Enthält alle Android-Komponenten.

<application>
    <activity> .. </activity> 

    <service>  .. </service>

    <receiver> .. </receiver>

    <provider> .. </provider>
</application> 

Wenn Sie getApplicationContext()von einer beliebigen Komponente aus aufrufen, rufen Sie den gemeinsamen Kontext der gesamten Anwendung auf.

Context wird vom System basierend auf dem Lebenszyklus der Komponenten ständig geändert.

Uddhav Gautam
quelle
1

Stellen Sie sich den Kontext als eine Box mit verschiedenen Ressourcen vor: Zeichenfolge, Farben und Schriftarten. Wenn Sie eine Ressource benötigen, wenden Sie sich an dieses Feld. Wenn Sie den Bildschirm drehen, ändert sich dieses Feld, da sich die Ausrichtung im Querformat ändert.

Leonid Ivankin
quelle
0

 Contextbedeutet Strom. ContextVerwenden Sie diese Option, um den aktuellen Bildschirm zu bedienen. Ex.
  1. getApplicationContext ()
  2. getContext ()

Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();
Nikita Prajapati
quelle
-7

In Java bezieht sich dieses Schlüsselwort auf den Status des aktuellen Objekts der Anwendung.
Ebenso haben wir in einer Alternative Contextin der Android-Entwicklung.

Dies kann entweder explizit oder implizit definiert werden.

Context con = this;

getApplicationContext();

getBaseContext();

getContext();
Gavine Joyce
quelle
Könnte nur das Objekt der aktuellen Aktivität sein, denke ich. Ich benutze es so, als ob es ein paar Mal so wäre.
Ohiovr
1
Es gibt eine Vielzahl von Möglichkeiten, um Kontext zu erhalten. Das Anrufen thisfunktioniert nur bei Aktivitäten. Der Kontext ist keine Alternative zu "diesem" - der Kontext wird für den Zugriff auf Systemfunktionen und vieles mehr verwendet. Sie vereinfachen den Kontext zu stark und verpassen damit den Hauptpunkt.
Zoe
-10

Dieses Attribut gibt an, welcher Aktivität dieses Layout standardmäßig zugeordnet ist .

Saleem Kalro
quelle