19 Application-Context und seine Verwendung

Der ApplicationContext in Android ist eine Instanz der Klasse Application und repräsentiert den globalen Zustand der Anwendung. Er verhält sich wie eine Singleton-Klasse und wird während der Lebensdauer der Anwendung einmal erstellt. Er kann verwendet werden, um auf Anwendungsressourcen und -klassen sowie auf Anrufe für Anwendungslevel-Vorgänge zuzugreifen. Zudem bietet er eine Schnittstelle zu Aktionen wie dem Starten von Activities, Broadcasting und Receiving von Intents.

Eine Anwendung kann ihren ApplicationContext über die getApplicationContext() Methode abrufen. Der ApplicationContext ist, im Gegensatz zu anderen Kontexten wie der Activity oder dem Service, nicht an den Lebenszyklus einer bestimmten Komponente gebunden und kann daher verwendet werden, wo ein langlebiger Kontext benötigt wird.

19.1 Anwendungsfälle für den ApplicationContext:

Es ist wichtig zu beachten, dass der ApplicationContext, obwohl er sehr nützlich ist, nicht immer der geeignete Kontext zur Verwendung ist. In manchen Fällen, wie beim Erzeugen von Layouts, sollte der Kontext der spezifischen Komponente (z.B. einer Activity) verwendet werden, da dieser das passende Thema und die richtigen Ressourcen für diese Komponente enthält. Es ist daher entscheidend, stets den geeigneten Kontext für die jeweilige Aufgabe zu wählen.

19.2 Beispiele für die Verwendung des ApplicationContext:

19.2.1 1. Beim Arbeiten mit Singleton-Klassen

Singleton-Klassen sind Klassen, die nur eine einzige Instanz während der Laufzeit der Anwendung haben. Beim Arbeiten mit Singleton-Klassen sollte in der Regel der ApplicationContext verwendet werden.

class MySingleton private constructor(private val context: Context) {

    companion object {
        @Volatile private var instance: MySingleton? = null

        fun getInstance(context: Context): MySingleton =
            instance ?: synchronized(this) {
                instance ?: MySingleton(context.applicationContext).also { instance = it }
            }
    }
}

19.2.2 2. Beim Erstellen einer benutzerdefinierten Toast-Nachricht

Beim Erstellen einer Toast-Nachricht könnte der ApplicationContext verwendet werden.

Toast.makeText(applicationContext, "Dies ist ein Toast", Toast.LENGTH_LONG).show()

19.2.3 3. Beim Arbeiten mit SharedPreferences

SharedPreferences ist eine Schnittstelle zur Speicherung und zum Abrufen von Schlüssel-Wert-Paaren. Beim Arbeiten damit könnte der ApplicationContext verwendet werden.

val sharedPreferences = applicationContext.getSharedPreferences("MyPreferences", Context.MODE_PRIVATE)

In diesen Beispielen kann der ApplicationContext anstelle des Activity Context verwendet werden, da der Activity Context einen kürzeren Lebenszyklus hat und die Verwendung des Activity Context in einem Kontext mit längerem Lebenszyklus zu Speicherlecks führen kann.