
Was ist Kontext?
Wie der Name schon sagt, ist dies der Kontext des aktuellen Status der Anwendung oder des Objekts. Dadurch können neu erstellte Objekte verstehen, was gerade passiert. Normalerweise rufen sie ihn an, um Informationen über einen anderen Teil des Programms zu erhalten.
Darüber hinaus ist Context
eine Anleitung für das System. Es kann Ressourcen bereitstellen, auf Datenbanken, Einstellungen usw. zugreifen. Android-Anwendungen haben auch Activity
. Es ist wie das Erkunden der Umgebung, in der Ihre Anwendung ausgeführt wird. Ein Activity
erbt ein Context
. Sie können auf bestimmte Ressourcen und Informationen zur Anwendungsumgebung zugreifen.
Context
in einer Android-Anwendung fast überall vorhanden und der wichtigste Teil. Daher müssen Sie verstehen, wie Sie ihn richtig verwenden.
Eine unsachgemäße Verwendung von Context
kann leicht zu Speicherverlusten in der Android-Anwendung führen.
Es gibt viele verschiedene Arten von Kontexten. Lassen Sie uns also herausfinden, was jeder von ihnen ist, wie und wann sie richtig verwendet werden sollen.
Anwendungskontext
Dies ist eine Singleton-Instanz (die einzige in der gesamten Anwendung), auf die über die Funktion getApplicationContext()
zugegriffen werden kann. Dieser Kontext ist an den Anwendungslebenszyklus gebunden. Ein Anwendungskontext kann verwendet werden, wenn Sie einen Kontext benötigen, dessen Lebenszyklus nicht mit dem aktuellen Kontext zusammenhängt, oder wenn Sie den Kontext außerhalb von Activity
.
Wenn Sie beispielsweise ein Singleton-Objekt für Ihre Anwendung erstellen müssen und dieses Objekt einen bestimmten Kontext benötigt, verwenden Sie immer den Anwendungskontext.
Wenn Sie in diesem Fall einen Activity
, führt dies zu einem Speicherverlust, da ein Singleton-Objekt einen Verweis auf die Activity
und bei Bedarf nicht vom Garbage Collector zerstört wird.
Wenn Sie eine Bibliothek in einer Activity
initialisieren müssen, übergeben Sie immer den Anwendungskontext und nicht den Activity
.
Daher sollte getApplicationContext()
verwendet werden, wenn bekannt ist, dass Sie einen Kontext für etwas benötigen, das länger leben kann als jeder andere Kontext, den Sie zur Verfügung haben.
Aktivitätskontext
Dieser Kontext ist in Activity
zugänglich und an seinen Lebenszyklus gebunden. Ein Activity
sollte verwendet werden, wenn Sie einen Kontext innerhalb einer Activity
oder einen Kontext benötigen, dessen Lebenszyklus an den aktuellen Kontext gebunden ist.
getContext () in ContentProvider
Dieser Kontext ist der Anwendungskontext und kann ähnlich wie der Anwendungskontext verwendet werden. Der Zugriff erfolgt über die Methode getContext()
.
Wann kann getApplicationContext () nicht verwendet werden?
- Dies ist kein vollständiger Kontext, der alles unterstützt, was eine
Activity
tun kann. Einige Dinge, die Sie in diesem Kontext versuchen, schlagen fehl, hauptsächlich im Zusammenhang mit der GUI. - Speicherverluste können auftreten, wenn der Kontext von
getApplicationContext()
für ein Objekt gehalten wird, das Sie später nicht löschen. Wenn der Activity
irgendwo Activity
, wird auch alles andere zerstört, sobald die Activity
vom Garbage Collector zerstört wird. Das Application
bleibt für die Dauer Ihres Prozesses erhalten.
Faustregel
Verwenden Sie in den meisten Fällen einen Kontext, auf den Sie direkt von der Komponente aus zugreifen können, in der Sie gerade arbeiten. Sie können einen Link sicher speichern, wenn er nicht über den Lebenszyklus dieser Komponente hinausgeht. Verwenden Sie den Link zum Anwendungskontext, sobald Sie den Link zum Kontext in einem Objekt speichern müssen, das sich außerhalb Ihrer Activity
oder einer anderen Komponente befindet, auch vorübergehend.