Je suis nouveau android et je suis en train de comprendre la différence entre getApplication()
, getApplicationContext(
), getBaseContext()
, getContext()
et someClass.this
surtout quand utiliser les ces méthodes dans les lignes de code suivantes:
Quand je lance un toast, quelle est la différence entre ces derniers 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 les 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);
android
android-intent
this
toast
android-context
Pheonix7
la source
la source
Réponses:
Toast et Intent , tous 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, le problème 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 de l' application est attaché au cycle de vie de l'application et sera toujours le même 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é (les deux) car un toast peut être levé de n'importe où dans votre application et n'est pas attaché à une fenêtre.
Le contexte de l' activité est attaché au cycle de vie de l'activité et peut être détruit si l'activité
onDestroy()
est augmentée. Si vous souhaitez lancer une nouvelle activité, vous devez utiliser le contexte de l'activité dans son intention afin que la nouvelle activité de lancement soit connectée à l'activité en cours (en termes de pile d'activités). Cependant, vous pouvez également utiliser le contexte de l'application pour lancer une nouvelle activité, mais vous devez ensuite définir un indicateurIntent.FLAG_ACTIVITY_NEW_TASK
dans l'intention pour la traiter comme une nouvelle tâche.En se référant maintenant à vos cas:
LoginActivity.this
bien que cela fasse référence à votre propre classe qui étend la classe Activity mais la classe de base (Activity) étend également la classe Context, de sorte qu'elle peut être utilisée pour offrir un contexte d'activité.getApplication()
bien qu'elle fasse référence à l'objet Application, mais la classe Application étend la classe Context, de sorte qu'elle peut être utilisée pour offrir un contexte d'application.getApplicationContext()
offre un contexte d'application.getBaseContext()
offre un contexte d'activité.la source
Context
->ContextWrapper
-> 1.Application
& 2.ContextThemeWrapper
->Activity
; etgetBaseContext()
est la méthode deContextWrapper
,getBaseContext() offers activity context.
ainsi queApplication Context
aussi ... n'est-ce pas?La réponse par Waqas est très claire et complète, mais je voudrais préciser davantage la différence entre l' utilisation par
this
rapport àgetBaseContext()
, ougetApplication()
contregetApplicationContext()
. Les deuxActivity
etApplication
ne s'étendent pasContext
, maisContextWrapper
, qui est unCe contexte «réel» est ce que vous obtenez en utilisant
getBaseContext()
.Donc, bien que
this
(pourActivity
) et lesgetBaseContext()
deux donnent le contexte de l'activité, ilsthis != getBaseContext()
) etthis
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()
contregetApplicationContext()
.la source
getBaseContext()
concerne, les développeurs Android de Google ont suggéré ceci: "N'utilisez pas getBaseContext (), utilisez simplement le contexte que vous avez." Donc, en fait, ils vous suggèrent d'utiliserthis
pour les activités.getBaseContext
j'ai trouvée sur Internet. Merci!!la ligne ci-dessus est une activité qui est évidemment un contexte .. cela est utilisé lorsque vous créez des AlertDialogs ... À certains endroits, il est obligatoire d'utiliser le contexte d'activité ...
Idem ici, la méthode make text nécessite le contexte et l'application elle-même implémente
Context
c'est la manière la plus préférée car cela
Context
dure jusqu'à ce que l'application s'arrête.ce contexte est disponible pour les widgets et les vues.
Mais tous donnent un objet Contexte et rien d'autre.
la source
getApplicationContext()
pour toutes les situations, mais il est préférable de l'utiliserthis
lorsque vous créez Toast dans une activité.Class.this utilisé si votre classe étend Activity getapplication () used refer application and application extend application context getbasecontext () refer your activity context context refer to your activity life cycle context applicationcontext refer to your app life cycle
la source