137 votes

différence et quand utiliser getApplication(), getcontexteapplication(), getBaseContext() et someClass.cette

im nouveau sur android et im essayant de comprendre la différence entre getApplication(), getcontexteapplication(), getBaseContext(), getContext() et someClass.cette et en particulier lors de l'utilisation de ces méthodes dans le code suivant des lignes:

lorsque je lance un toast qu'est-ce que la differece entre ceux-ci 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);

merci!!

237voto

waqaslam Points 31012

Toast et l'Intention, à la fois il faut faire référence au contexte. Et getApplication, getcontexteapplication, LoginActivity.ce 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.

  1. Le Contexte De L'Application
  2. Contexte D'Activité

L'Application de 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 des Toasts, 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.

L'activité de 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 son 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 drapeau de l'Intention.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 de contexte de l'application.

getBaseContext() offres contexte d'activité.

Conseils: si vous avez besoin de manipuler Views puis aller pour L'activité de Contexte, d'autre Application-Contexte serait suffisant.

31voto

AlexR Points 209

La réponse par Waqas est très clair et complet, cependant, je tiens à clarifier la différence entre l'utilisation de 'cette' vs getBaseContext(), ou getApplication() vs getcontexteapplication(). De l'Activité et d'Application s'étendent pas du Contexte lui-même, mais ContextWrapper, qui est un "Proxy de mise en œuvre de Contexte que, tout simplement, délègue tous ses appels vers un autre Contexte". Que contexte "réel" est ce que vous obtenez en utilisant getBaseContext().

Ainsi, bien que " il " (pour l'Activité) et getBaseContext() à la fois donner le contexte d'activité, ils (a) ne font pas référence au même objet (this != getBaseContext()) et (b) l'appel de contexte par " il " 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() vs getcontexteapplication().

6voto

ngesh Points 8686
LoginActivity.this 

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é...

getApplication()

Même ici, le texte de la méthode des besoins du Contexte et de l'Application elle-même implémente Context

getApplicationContext()

ce qui est le plus préféré de chemin depuis ce Context vie jusqu'à l'Application s'arrête.

getBaseContext()

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..

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X