Was ist der Unterschied zwischen Aktivität und Kontext?

91

Sind Aktivität und Kontext gleich oder gibt es Unterschiede?

Wann sollte eine Methode eine Aktivität übergeben und wann einen Kontext?

Android
quelle
@Egor Thnx Mann, und sicherlich werde ich mich darum kümmern .. bevor ich eine Frage stelle .. kannst du mir in einer weiteren Frage helfen .. was ist die Wurzel aller Aktivitäten in Android
Android
Bitte überprüfen Sie die Diskussion unten, um die Frage zu klären
Egor
Schade, dass keine dieser Antworten sehr vollständig ist. Dies ist das erste Element, das für eine Google-Suche angezeigt wird.
SMBiggs

Antworten:

117

Soweit ich weiß: Kontext ist das Basisobjekt. Jede Aktivität, die mit der Anwendung identisch ist, leitet sich aus dem Kontext ab. Dies bedeutet, dass jede Aktivität und jeder ApplicationIS a Context;

Aus der developer.android.com Aktivität

java.lang.Object
   android.content.Context
       android.content.ContextWrapper
           android.view.ContextThemeWrapper
               android.app.Activity

Und Anwendung

java.lang.Object
   android.content.Context
       android.content.ContextWrapper
           android.app.Application

Ein Anwendungskontext bleibt so lange bestehen, wie Ihre App aktiv ist, während der Aktivitätskontext mit Ihrer Aktivität stirbt (er ist nach onDestroydieser Aktivität nicht mehr gültig ).

Wenn Sie also den Kontext für alle Aktivitäten benötigen (dh in einem Singleton), ist es besser, einen Anwendungskontext zu verwenden.

Bei Android Framework-Methoden, bei denen ein Kontext erwartet wird, spielt es normalerweise keine Rolle, welchen Sie übergeben. Beachten Sie jedoch immer MemoryLeaks, wenn Sie langlebige Verweise auf einen Kontext behalten

Rafael T.
quelle
2
Ja, es tut mir leid, ich habe den Link überprüft, tatsächlich ist der Kontext eine Oberklasse von Aktivitäten. Wie auch immer, es ist nicht ganz richtig zu sagen, dass Aktivität ein Kontext ist, Aktivität ein komplexeres Objekt ist, während Kontext nur ein Block ist, der die Informationen enthält und den Zugriff auf Ressourcen ermöglicht.
Egor
@ Rafael T Danke für die richtige Antwort
Android
17
Es ist völlig richtig, wenn ich mich auf objektorientierte Sprachen beziehe: Jedes Objekt in Java leitet sich von Object.class ab, also ist in FACT alles ein Objekt. Genauer gesagt: Aktivität ist eine Spezialisierung des Kontexts. Wenn ich ein Tier der abstrakten Klasse und zwei Klassen habe, die von Tier (Katze, Hund) abgeleitet sind, sind diese beiden mindestens Tiere. Überall dort, wo ein Tier benötigt wird, können Sie Katzen oder Hunde weitergeben, da dies auch für den Kontext gilt! Bitte bestätigen Sie die Informationen, bevor Sie mich ablehnen
Rafael T
1
"Ein Aktivitätskontext bleibt bestehen, solange Ihre App aktiv ist, während der Aktivitätskontext mit Ihrer Aktivität stirbt" scheint deaktiviert zu sein. Sollte nicht der erste Anwendungskontext sein ?
FirstOne
8

Wie Sie auf dem Android-Dokument sehen können :

Die Activity-Klasse erstreckt sich von "ContextThemeWrapper" und diese von "ContextWrapper" und die von "Context".

Also, ja, eine Aktivität erweitert den Kontext!

zapotec
quelle