Kontext in einer Android-Anwendung

Kontext in einer Android-Anwendung


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.

Source: https://habr.com/ru/post/de421115/


All Articles