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.
- Contexte de l'application
- Contexte de l'activité
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 indicateur Intent.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é.
Conseils: Chaque fois que vous avez besoin de manipuler, Views
optez pour
Activity-Context , sinon Application-Context suffirait.