Différence entre getContext() , getcontexteapplication() , getBaseContext() et “ce”
Quelle est la différence entre getContext()
, getApplicationContext()
, getBaseContext()
, et "this
"?
Cependant c'est une simple question, je suis incapable de comprendre la différence fondamentale entre eux. Veuillez donner quelques exemples si possible.
- Il y a un excellent article dans la première réponse: stackoverflow.com/questions/1026973/...
- Double Possible de What est la différence entre les différentes méthodes pour obtenir un Contexte?
Vous devez vous connecter pour publier un commentaire.
Afficher.getContext()
: Retourne le contexte, le point de vue est actuellement en cours d'exécution. Habituellement actuellement en Activité.de l'Activité.getcontexteapplication()
: Retourne le contexte de l'ensemble de l'application (toutes les Activités sont en cours d'exécution à l'intérieur ded'). Utiliser ce lieu de l'actuel contexte d'Activité si vous avez besoin d'un
contexte lié au cycle de vie de l'ensemble de l'application, et pas seulement la
l'Activité en cours.
ContextWrapper.getBaseContext()
: Si vous avez besoin d'accéder à un Contexte dans un autre contexte, vous utilisez un ContextWrapper. L'Contexte visé de l'intérieur que ContextWrapper est accessible via
getBaseContext().
Context
s de sorte que le forum et je peux obtenir une compréhension plus claire de la façon dont ils sont utilisés. Et peut-être ce que l'objet qui nécessite de laContext
s.this
etgetContext()
ne sont pas toujours les mêmes par exemple, dans l'Activité de classe, vous pouvez utiliserthis
parce queActivity
hérite deContext
, mais la méthodegetContext()
n'est pas dansActivity
classe. @mikedroid @KCRajuthis
donne une instance de la classe, il en, qui pourrait être n'importe quelle classe, pas nécessairement en contexte. Si vous l'utilisez dans une Activité de classe, puisthis
sera une instance d'unContext
.this
dans un intérieur classe d'unActivity
, mais vous pouvez utilisergetContext()
.YourActivity.this.getApplicationContext()
sera admissible à votre contexte de l'instance deYourActivity
. Sinon la réponse ci-dessus est grand - il est tout au sujet du cycle de vie d'un code que vous écrivez - out de vie de l'activité/fragment ou pas.getBaseContext()
besoin de plus d'explication peut-être avec un exemple.La plupart des réponses couvrent déjà
getContext()
etgetApplicationContext()
mais getBaseContext() est rarement expliqué.La méthode
getBaseContext()
n'est utile que si vous avez unContextWrapper
.Android fournit un
ContextWrapper
classe qui est créé autour d'un existantContext
à l'aide de:L'avantage d'utiliser un
ContextWrapper
est qu'il vous permet de “modifier le comportement sans changer le Contexte d'origine”. Par exemple, si vous avez une activité appeléemyActivity
peuvent alors créer unView
avec un thème différent quemyActivity
:ContextWrapper
est très puissant car il permet de remplacer la plupart des fonctions fournies parContext
y compris le code d'accès à des ressources (par exemple,openFileInput()
,getString()
), d'interagir avec d'autres composants (par exemple,sendBroadcast()
,registerReceiver()
), les demandes d'autorisations (par exemple,checkCallingOrSelfPermission()
) et de résoudre les emplacements du système de fichiers (par exemple,getFilesDir()
).ContextWrapper
est vraiment utile de travailler autour de l'appareil et de la version de problèmes spécifiques ou à appliquer l'une-off personnalisations de composants tels que les points de Vue qui nécessitent un contexte.La méthode getBaseContext() peut être utilisé pour accéder à la “base” Contexte que le
ContextWrapper
s'enroule autour de. Vous pourriez avoir besoin pour accéder à la “base” contexte si vous devez, par exemple, vérifier si c'est unService
,Activity
ouApplication
:Ou si vous avez besoin d'appeler le “déballé” version d'une méthode:
ContextWrapper
est l'une des pires décisions jamais fait par les développeurs d'Android cadre. Quand ils ont réalisé qu'ils ont créé toute une famille de Dieu Objets, au lieu de faire la bonne chose et refactoring du code vers la Responsabilité Unique, ils ont ajouté un vilain hack qui a permis de modifier le Contexte du comportement par l'approfondissement de l'arbre d'héritage. Mauvais génie logiciel à son plus laid. Comme pour nous, les développeurs, à mon humble avis il ne faut jamais utilisergetBaseContext()
ouContextWrapper
. Si vous n' - c'est un énorme "odeur de code".Context
fournit des informations sur laActvity
ouApplication
nouvellement créés composants.Pertinentes
Context
devrait être fournie aux nouveaux composants (si le contexte de l'application ou de l'activité contexte)Depuis
Activity
est une sous-classe deContext
, on peut utiliserthis
pour obtenir que l'activité du contexteLa question "quel est le Contexte qui est" est l'une des questions les plus difficiles dans l'univers Android.
Contexte définit les méthodes que l'accès aux ressources du système, d'extraire l'application de la statique des actifs, vérifier les autorisations, effectuer des manipulations de l'INTERFACE utilisateur et beaucoup plus. En essence,
Context
est un exemple de Dieu, Objet de l'anti-modèle en production.Quand il s'agit de quel type de
Context
devrions-nous utiliser, ça devient très compliqué car à part pour Dieu, l'Objet, la hiérarchie de l'arbre deContext
sous-classes viole le Principe de Substitution de Liskov brutalement.Ce blog tente de résumer
Context
classes applicabilité dans des situations différentes.Permettez-moi de copier le tableau principal de ce poste est complet:
Un morceau de UML diagramme de Contexte
De cette docs
J'ai compris que vous devez utiliser:
getcontexteapplication()
getContext() et getBaseContext()
ce