différence et quand utiliser getApplication (), getApplicationContext (), getBaseContext () et someClass.this

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.

  1. Contexte d’application
  2. Contexte de l’activité

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 autre Context “.

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

  • (a) ne font pas référence au même object ( this != getBaseContext() ) et
  • (b) le contexte d’appel est légèrement moins efficace, car les appels passent par un niveau supplémentaire d’indirection. Je doute que cela fasse une différence pratique, cependant.

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