
Qu'est-ce que le contexte?
Comme son nom l'indique, il s'agit du contexte de l'état actuel de l'application ou de l'objet. Cela permet aux objets nouvellement créés de comprendre ce qui se passe. Habituellement, ils l'appellent pour obtenir des informations sur une autre partie du programme.
De plus, Context
est un guide du système, il peut fournir des ressources, accéder à des bases de données, des préférences, etc. Les applications Android ont également une Activity
. C'est comme explorer l'environnement dans lequel votre application s'exécute. Un objet Activity
hérite d'un objet Context
. Il vous permet d'accéder à des ressources et des informations spécifiques sur l'environnement d'application.
Context
présent presque partout dans une application Android et est sa partie la plus importante, vous devez donc comprendre comment l'utiliser correctement.
Une mauvaise utilisation de Context
peut facilement entraîner des fuites de mémoire dans l'application Android.
Il existe de nombreux types de contextes différents, alors essayons de comprendre ce que chacun d'eux est, comment et quand les utiliser correctement.
Contexte d'application
Il s'agit d'une instance singleton (la seule dans toute l'application), et elle est accessible via la fonction getApplicationContext()
. Ce contexte est lié au cycle de vie de l'application. Un contexte d'application peut être utilisé lorsque vous avez besoin d'un contexte dont le cycle de vie n'est pas lié au contexte actuel, ou lorsque vous devez passer le contexte en dehors d' Activity
.
Par exemple, si vous devez créer un objet singleton pour votre application et que cet objet a besoin d'un certain contexte, utilisez toujours le contexte de l'application.
Si vous passez un contexte d' Activity
dans ce cas, cela entraînera une fuite de mémoire, car un objet singleton gardera une référence à l' Activity
et ne sera pas détruit par le garbage collector si nécessaire.
Dans le cas où vous devez initialiser une bibliothèque dans une Activity
, passez toujours le contexte d'application, pas le contexte d' Activity
.
Par conséquent, getApplicationContext()
doit être utilisé lorsqu'il est connu que vous avez besoin d'un contexte pour quelque chose qui peut vivre plus longtemps que tout autre contexte dont vous disposez.
Contexte de l'activité
Ce contexte est accessible dans Activity
et est attaché à son cycle de vie. Un contexte d' Activity
doit être utilisé lorsque vous passez un contexte dans une Activity
ou si vous avez besoin d'un contexte dont le cycle de vie est lié au contexte actuel.
getContext () dans ContentProvider
Ce contexte est le contexte d'application et peut être utilisé de manière similaire au contexte d'application. Il est accessible via la méthode getContext()
.
Quand ne peut-on pas utiliser getApplicationContext ()?
- Ce n'est pas un contexte complet qui prend en charge tout ce qu'une
Activity
peut faire. Certaines choses que vous essayez de faire avec ce contexte échoueront, principalement liées à l'interface graphique. - Des fuites de mémoire peuvent se produire si le contexte de
getApplicationContext()
conservé sur un objet que vous getApplicationContext()
pas plus tard. Si le contexte d' Activity
lieu quelque part, dès que l' Activity
détruite par le garbage collector, tout le reste est également détruit. L'objet Application
reste pour la durée de vie de votre processus.
Règle d'or
Dans la plupart des cas, utilisez un contexte accessible directement à partir du composant dans lequel vous travaillez actuellement. Vous pouvez stocker en toute sécurité un lien vers celui-ci s'il ne dépasse pas le cycle de vie de ce composant. Dès que vous devez enregistrer un lien vers un contexte dans un objet qui vit en dehors de votre Activity
ou d'un autre composant, même temporairement, utilisez le lien vers le contexte de l'application.