Question très intéressante. Je pense que c'est surtout une signification sémantique, et peut également être due à des raisons historiques.
Bien que dans le courant Android Activité et de Service, les implémentations, getApplication()
et getApplicationContext()
retour le même objet, il n'y a aucune garantie que ce sera toujours le cas (par exemple, un fournisseur spécifique de mise en œuvre).
Donc, si vous voulez la classe d'Application que vous avez enregistré dans le Manifeste, vous devriez ne jamais les appeler getApplicationContext()
le et jette-le à votre demande, car il ne peut pas être l'instance de l'application (ce qui de toute évidence vous expérimenté avec le framework de test).
Pourquoi est - getApplicationContext()
existe, en premier lieu ?
getApplication()
n'est disponible que sur l'Activité de la classe et dans la classe de Service, alors que getApplicationContext()
est déclaré dans le Contexte de la classe.
Que signifie en fait qu'une chose : lors de l'écriture de code dans un récepteur de radiodiffusion, ce qui n'est pas un contexte, mais est dans un contexte donné, dans sa méthode onReceive, vous pouvez uniquement appeler getApplicationContext()
. Ce qui signifie également que vous n'êtes pas la garantie d'avoir accès à votre application dans un BroadcastReceiver.
Quand on regarde le code Android, vous voyez que lorsqu'il est attaché, une activité reçoit une base de contexte et d'une demande, et ceux qui sont différents paramètres. getApplicationContext()
délègue à l'appel à l' baseContext.getApplicationContext()
.
Une chose de plus : la documentation dit que la plupart des cas, vous ne devriez pas sous-classe de l'Application:
Il n'est normalement pas nécessaire pour sous - Application
. Dans la plupart des situation,
statique des singletons peuvent fournir les mêmes fonctionnalités dans un plus modulaire
façon. Si votre singleton a besoin d'un contexte global (par exemple pour vous inscrire
récepteurs de radiodiffusion), la fonction de récupération, il peut être donné une
Context
qui utilise en interne Context.getApplicationContext()
lorsque
d'abord la construction de l'singleton.
Je sais que ce n'est pas exact de réponse précise, mais encore, ne fait que répondre à votre question?