Je suis nouveau sur Android et j’essaie de comprendre la différence entre getApplication()
, getApplicationContext(
), getBaseContext()
, getContext()
et someClass.this
et surtout quand utiliser ces méthodes dans les lignes de code suivantes:
Quand je lance un toast, quelle est la différence entre ceux-ci et dans quels cas les utiliser?
Toast.makeText(LoginActivity.this, "LogIn successful", Toast.LENGTH_SHORT).show(); Toast.makeText(getApplication(), "LogIn successful", Toast.LENGTH_SHORT).show(); Toast.makeText(getApplicationContext(), "LogIn successful", Toast.LENGTH_SHORT).show(); Toast.makeText(getBaseContext(), "LogIn successful", Toast.LENGTH_SHORT).show();
même avec des intentions:
Intent intent = new Intent(getApplicationContext(), LoginActivity.class); Intent intent = new Intent(MenuPagina., LoginActivity.class); Intent intent = new Intent(getBaseContext(), LoginActivity.class); Intent intent = new Intent(getApplication(), LoginActivity.class);
Toast and Intent , les deux nécessitent une référence au contexte . Et getApplication , getApplicationContext , LoginActivity.this et getBaseContext , ils offrent tous une référence au contexte.
Maintenant, la chose confond est la déclaration de différents contextes et leur utilisation spécifique. Pour simplifier les choses, vous devez compter deux types de contexte disponibles dans le framework Android.
Le contexte d’ application est attaché au cycle de vie de l’application et sera toujours identique tout au long de la vie de l’application. Donc, si vous utilisez Toast , vous pouvez utiliser le contexte d’application ou même le contexte d’activité, car un toast peut être levé de n’importe où dans votre application et n’est pas associé à une fenêtre.
Le contexte d’ activité est associé au cycle de vie de l’activité et peut être détruit si le onDestroy()
l’activité est onDestroy()
. Si vous souhaitez lancer une nouvelle activité, vous devez utiliser le contexte de l’activité dans son intention pour que la nouvelle activité de lancement soit connectée à l’activité en cours (en termes de stack d’activités). Cependant, vous pouvez également utiliser le contexte de l’application pour lancer une nouvelle activité, mais vous devez ensuite définir l’indicateur Intent.FLAG_ACTIVITY_NEW_TASK
dans l’intention de le traiter comme une nouvelle tâche.
En ce qui concerne vos cas:
LoginActivity.this
bien qu’il LoginActivity.this
référence à votre propre classe qui étend la classe Activity mais que la classe de base (Activity) étend également la classe Context, il peut donc être utilisé pour offrir un contexte d’activité.
getApplication()
faisant référence à l’object Application mais la classe Application étend la classe Context, elle peut donc être utilisée pour offrir un contexte d’application.
getApplicationContext()
offre un contexte d’application.
getBaseContext()
offre un contexte d’activité.
Astuces: Chaque fois que vous avez besoin de manipuler
Views
optez pour le contexte d’activité , sinon le contexte d’ application suffirait.
La réponse de Waqas est très claire et complète, mais j’aimerais clarifier davantage la différence entre l’utilisation de getBaseContext()
ou de getApplication()
et de getApplicationContext()
. Activity
et Application
étendent non Context
lui-même, mais ContextWrapper
, qui est un
“Implémentation par contournement du
Context
qui délègue simplement tous ses appels à un autreContext
“.
Ce “vrai” contexte est ce que vous obtenez en utilisant getBaseContext()
.
Donc, bien que this
(pour Activity
) et getBaseContext()
donnent tous deux le contexte d’activité, ils
this != getBaseContext()
) et La même logique s’applique à getApplication()
vs. getApplicationContext()
.
LoginActivity.this
la ligne ci-dessus est une activité qui est évidemment un contexte. Elle est utilisée lorsque vous créez des AlertDialogs … À certains endroits, il est obligatoire que vous utilisiez le contexte d’activité …
getApplication()
Même chose ici, la méthode make text nécessite Context et Application elle-même implémente Context
getApplicationContext()
c’est la manière la plus préférée depuis que ce Context
vit jusqu’à ce que Application s’arrête.
getBaseContext()
Ce contexte est disponible pour les widgets et les vues.
Mais tous donnent un object Context et rien d’autre.
Class.this utilisé si votre classe étend Activity getapplication () used referme et application étend le contexte d’application