Was genau ist eine Context
Klasse in der Android-Programmierung und wofür wird sie verwendet?
Ich habe auf der Entwicklerseite darüber gelesen, kann es aber nicht klar verstehen.
Was genau ist eine Context
Klasse in der Android-Programmierung und wofür wird sie verwendet?
Ich habe auf der Entwicklerseite darüber gelesen, kann es aber nicht klar verstehen.
Antworten:
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, ...);
context.getSystemService(LAYOUT_INFLATER_SERVICE)
Wo und wie wird in Ihrem Beispiel context
definiert?
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.
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:
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()
this
(wenn in der Aktivitätsklasse)Beispiel:
TextView tv = new TextView(this);
Das Schlüsselwort this
bezieht sich auf den Kontext der aktuellen Aktivität.
getApplicationContext()
, getContext()
, getBaseContext()
..... Siehe this -> ( stackoverflow.com/a/10641257 )
SomeActivityName.this
. In einem Thread this
bezieht sich eine Instanz auf den Thread und nicht auf die Aktivität
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:
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:
getAssets()
getResources()
getPackageManager()
getString()
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.xml
Ressource einbinden (egal, dass aapt den Zugriff auf Ressourcen über Java-Code ermöglicht, das ist ein separates Problem).
Das Ergebnis ist , dass Context
ist 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 Context
Klasse. Die naheliegendste Klasse der ist Activity
Klasse. Activity
Inherits aus ContextThemeWrapper
, die erbt von ContextWrapper
, die erbt von Context
selbst. 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 ContextThemeWrapper
und ContextWrapper
sind so ziemlich wie sie klingen. sie die abstrakten Elemente des Gerätes Context
Klasse selbst, indem Sie einen Kontext (den tatsächlichen Kontext) "umschließen" und diese Funktionen an diesen Kontext delegieren. Ein Beispiel ist hilfreich - in derContextWrapper
Klasse, die abstrakte Methode getAssets
aus der Context
Klasse wird wie folgt implementiert:
@Override
public AssetManager getAssets() {
return mBase.getAssets();
}
mBase
ist einfach ein Feld, das vom Konstruktor auf einen bestimmten Kontext festgelegt wird. Daher wird ein Kontext umbrochen und die ContextWrapper
Implementierung der Methode getAssets an diesen Kontext delegiert. Kommen wir zurück zur Untersuchung der Activity
Klasse, von der letztendlich geerbt wird, um Context
zu 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 Activity
und Context
interagieren 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
? this
ist Ihre Aktivität, weil die Activity
Klasse von erbt Context
. Die vollständige Übersicht lautet wie folgt: Wenn Sie aufrufen startActivity
, Activity
führt die Klasse letztendlich Folgendes aus:
Instrumentation.ActivityResult ar =
mInstrumentation.execStartActivity(
this, mMainThread.getApplicationThread(), mToken, this,
intent, requestCode);
Also nutzt es das execStartActivity
aus der Instrumentation
Klasse (eigentlich aus einer inneren Klasse in Instrumentation
aufgerufen 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 this
in der execStartActivity
obigen Methode ist Ihre Aktivität, dh der Kontext, und der execStartActivity
nutzt 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 ActivityResult
verwendet das eine native Operation - die ActivityManagerNative.getDefault().startActivity()
die verwendet, die Context
Sie 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, ContentResolver
damit es „den MIME-Typ der Intent-Daten bestimmen kann“. Diese ganze Frage, wie startActivity
der 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. Context
Dies ermöglicht den Zugriff auf diese Ressourcen. Ein einfacheres Beispiel könnten Ansichten sein. Wir alle wissen, was Sie erstellen Benutzerdefinierte Ansicht durch Erweitern RelativeLayout
oder eine andere View
Klasse müssen Sie einen Konstruktor bereitstellen, der a akzeptiertContext
als 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 Context
den 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.
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 .
Context
ist eine "Schnittstelle" zu den globalen Informationen über eine Anwendungsumgebung. In der Praxis Context
ist 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 Context
sich die Stammklasse dieser Hierarchie befindet. Insbesondere ist hervorzuheben, dass Activity
es sich um einen Nachkommen von handelt Context
.
Was Context
genau 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.Context
Objekt 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
.
Einfaches Beispiel, um context
in 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:
Verschiedene Möglichkeiten, um Kontext zu erhalten:
getContext()
getBaseContext()
getApplicationContext()
this
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.
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.
Was kannst du damit machen?
Möglichkeiten, um Kontext zu erhalten:
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 AppContext
in 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 ;)
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.
Die Klasse android.content.Context
stellt 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 Context
Klasse.
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.
Der Kontext ist eine Schnittstelle zu globalen Informationen über eine Anwendungsumgebung. Es ist eine abstrakte Klasse, deren Implementierung vom Android
System 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
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
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).
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.
A Context
wü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.
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
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 Context
Klasse gibt ihm die Ressourcen zurück (in diesem Fall beabsichtigt).
Wie jede andere Klassenklasse hat auch diese Context
Klasse Felder und Methoden.
Weitere Informationen finden Sie Context
in der offiziellen Dokumentation. Sie behandelt so ziemlich alles, verfügbare Methoden, Felder und sogar die Verwendung von Feldern mit Methoden.
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.
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 .
Einfach ausgedrückt Context
ist Androids ein Chaos, das Sie nicht lieben werden, bis Sie aufhören, sich Sorgen zu machen.
Android Context
s 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 Context
Instanzen 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).
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
Context
bedeutet 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. Context
Die 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 context
an Activity
, was vom Konstruktor der Aktivität festgelegt (erstellt) wird.
getApplicationContext()
- gibt das Context
Setup (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.
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.
Context
bedeutet Strom.
Context
Verwenden Sie diese Option, um den aktuellen Bildschirm zu bedienen. Ex.
1. getApplicationContext ()
2. getContext ()
Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();
Tolle Erklärungen! Um all das zu ergänzen, fand ich dieses von MindOrks sehr hilfreich und zeigt sogar einige grundlegende Anwendungsfälle, um Ihre Gedanken in Schwung zu bringen:
In Java bezieht sich dieses Schlüsselwort auf den Status des aktuellen Objekts der Anwendung.
Ebenso haben wir in einer Alternative Context
in der Android-Entwicklung.
Dies kann entweder explizit oder implizit definiert werden.
Context con = this;
getApplicationContext();
getBaseContext();
getContext();
this
funktioniert 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.
Dieses Attribut gibt an, welcher Aktivität dieses Layout standardmäßig zugeordnet ist .