Question très intéressante. Je pense que c'est principalement un sens sémantique, et peut également être dû à des raisons historiques.
Bien que dans les implémentations actuelles d'Activité et de Service Android, getApplication()
et getApplicationContext()
renvoyant le même objet, il n'y a aucune garantie que ce sera toujours le cas (par exemple, dans une implémentation de fournisseur spécifique).
Donc, si vous voulez la classe Application que vous avez enregistrée dans le manifeste, vous ne devez jamais l' appeler getApplicationContext()
et la transtyper dans votre application, car il ne s'agit peut-être pas de l'instance d'application (que vous avez manifestement expérimentée avec le framework de test).
Pourquoi getApplicationContext()
existe- t- il en premier lieu?
getApplication()
est uniquement disponible dans la classe Activity et la classe Service, alors qu'il getApplicationContext()
est déclaré dans la classe Context.
Cela signifie en fait une chose: lorsque vous écrivez du code dans un récepteur de diffusion, qui n'est pas un contexte mais reçoit un contexte dans sa méthode onReceive, vous ne pouvez qu'appeler getApplicationContext()
. Ce qui signifie également que vous n'êtes pas assuré d'avoir accès à votre application dans un BroadcastReceiver.
Lorsque vous regardez le code Android, vous voyez que lorsqu'elle est attachée, une activité reçoit un contexte de base et une application, et ce sont des paramètres différents. getApplicationContext()
délègue son appel baseContext.getApplicationContext()
.
Une dernière chose: la documentation indique que dans la plupart des cas, vous ne devriez pas avoir besoin de sous-classer Application:
Il n'y a normalement pas besoin de sous-classe Application
. Dans la plupart des situations, les singletons statiques peuvent fournir les mêmes fonctionnalités de manière plus modulaire. Si votre singleton a besoin d'un contexte global (par exemple pour enregistrer des récepteurs de diffusion), la fonction pour le récupérer peut être affectée à un
Context
qui l'utilise en interne Context.getApplicationContext()
lors de la première construction du singleton.
Je sais que ce n'est pas une réponse exacte et précise, mais est-ce que cela répond à votre question?
Application
objet dans votre application.