différence et quand utiliser getApplication(), getcontexteapplication(), getBaseContext() et someClass.cette
Je suis nouveau sur android et j'essaie de comprendre la différence entre getApplication()
, getApplicationContext(
), getBaseContext()
, getContext()
et someClass.this
et en particulier lors de l'utilisation de ces méthodes dans le code suivant des lignes:
Lorsque je lance un toast quelle est la différence entre ces derniers et dans quel 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);
- Double Possible de stackoverflow.com/q/1026973/741249 ou stackoverflow.com/q/6854265/741249
- ils gérer uniquement le contexte et baseContext. mais j'aimerais comprendre l'ensemble de leurs usages dans les 2 contexes. merci
Vous devez vous connecter pour publier un commentaire.
Toast et Intention, à la fois il faut faire référence à contexte. Et getApplication, getcontexteapplication, LoginActivity.cette et getBaseContext, ils proposent tous référence au contexte.
Maintenant la chose confond est la déclaration de différents contextes et de leur utilisation. Pour rendre les choses simples, vous devez compter deux types de contexte disponible dans l'Android cadre.
Application contexte est attachée à l'application du cycle de vie et sera toujours le même tout au long de la durée de vie de l'application. Donc, si vous utilisez Toast, vous pouvez utiliser le contexte de l'application ou même contexte d'activité (les deux), car un toast peut être porté de n'importe où dans votre application et n'est pas attaché à une fenêtre.
Activité contexte est attaché à l'Activité du cycle de vie et peuvent être détruits si l'activité est
onDestroy()
est soulevée. Si vous souhaitez lancer une nouvelle activité, vous devez avoir besoin d'utiliser de l'activité du contexte dans ses Intention de sorte que le lancement de la nouvelle activité est liée à l'activité courante (en termes d'activité de la pile). Toutefois, vous pouvez utiliser l'application en contexte pour lancer une nouvelle activité, mais ensuite, vous devez définir le drapeauIntent.FLAG_ACTIVITY_NEW_TASK
dans l'intention de la traiter comme une nouvelle tâche.Maintenant, en se référant à votre cas:
LoginActivity.this
si sa se référant à votre propre classe qui s'étend de l'Activité de classe, mais la classe de base (Activité) s'étend aussi au Contexte de la classe, de sorte qu'il peut être utilisé pour offrir contexte d'activité.getApplication()
si sa se référant à l'objet Application, mais la classe d'Application s'étend au Contexte de la classe, de sorte qu'il peut être utilisé pour offrir contexte de l'application.getApplicationContext()
offre le contexte de l'application.getBaseContext()
offre contexte d'activité.Context
->ContextWrapper
-> 1.Application
& 2.ContextThemeWrapper
->Activity
; etgetBaseContext()
est une méthode deContextWrapper
, doncgetBaseContext() offers activity context.
ainsi queApplication Context
trop...n'est-ce pas?WindowManager$BadTokenException
qui est déclenché une fois que vous avez essayé d'appeler un toast à partir d'un fini de l'activité? Cela signifie littéralement que le toast est attaché ou je me trompe? Ou est-il une différence entre dire "La réponse par Waqas est très clair et complet, cependant, je tiens à clarifier la différence entre l'utilisation de
this
vsgetBaseContext()
, ougetApplication()
vsgetApplicationContext()
. Les deuxActivity
etApplication
étendre pasContext
lui-même, maisContextWrapper
, qui est unQue le contexte "réel" est ce que vous obtenez en utilisant
getBaseContext()
.Ainsi, bien que
this
(pourActivity
) etgetBaseContext()
à la fois donner le contexte d'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 fait une différence, cependant.La même logique s'applique à
getApplication()
vsgetApplicationContext()
.getBaseContext()
est concerné, Google Android, les Développeurs ont suggéré ceci: "Ne pas utiliser getBaseContext(), il suffit d'utiliser le Contexte que vous avez." Donc, en effet, ils vous suggérons d'utiliserthis
pour les Activités.getBaseContext
j'ai trouvé sur Internet. Merci!!la ligne ci-dessus est une Activité qui est obeveously un Contexte.. ce qui est utilisé lorsque vous créez des AlertDialogs... À certains endroits de son obligatoire que vous utilisez Contexte d'Activité...
Même ici le texte de la méthode des besoins du Contexte et de l'Application elle-même met en œuvre
Context
ce qui est le plus préféré de chemin depuis ce
Context
vie jusqu'à l'Application s'arrête.ce Contexte est à la disposition des widgets et des points de Vue..
Mais Tous d'entre eux donne un Contexte objet et rien d'autre..
getApplicationContext()
pour l'ensemble de la situation, mais il est préférable que vous utilisezthis
lors de la prise de Toast dans une Activité.Classe.ce utilisé si votre classe étend de l'Activité
getapplication() utilisé reporter l'application et l'application s'étend le contexte de l'application
getbasecontext (), consultez votre contexte d'activité
contexte reportez-vous à votre activité cycle de vie du contexte
applicationcontext reportez-vous à votre application cycle de vie