Obtenir le Contexte de l'Application
Cela pourrait être une question simple, mais je voulais juste m'assurer que je suis de droite.
Dans mon application android, j'ai un constructeur qui utilise:
activity.getApplicationContext()
L'activité est passé dans le constructeur en tant que paramètre.
Le problème est que je suis à l'appel de cette classe à partir d'un Service. Si je fais une deuxième constructeur qui accepte le Service en tant que paramètre et utilise service.getApplicationContext
? Vais-je obtenir le même contexte de l'application?
- J'ai une question très semblable - j'ai une application qui a plus d'un processus. Il y a une bibliothèque qui a besoin d'un chargeur de classe mais n'est pas une application mais est utilisé dans les applications. Il peut être en plus d'un processus dans l'application. Est-il un moyen d'obtenir de l'actuel processus de contexte à partir d'une bibliothèque à l'aide de certains généraux de l'objet accessible dans tout processus à partir d'une bibliothèque donc je peux le contexte d'appel.getClassLoader()?
Vous devez vous connecter pour publier un commentaire.
Vais-je obtenir le même contexte de l'application?
Oui. Vous pouvez vérifier le android documentation, ils ont fourni
Retourner le contexte du mondial unique objet de l'Application du processus courant.
De sorte qu'il ne devrait pas être modifié pour l'ensemble du processus de demande.
Veuillez également prendre note de ceci:
getApplicationContext()
généralement doit uniquement être utilisé si vous avez besoin d'un Contexte dont le cycle de vie est séparé du contexte actuel, qui est liée à la durée de vie du processus plutôt que le composant en cours.Corrigez-moi si je me trompe.
Grâce
La façon la plus simple pour obtenir le contexte de l'application est:
Créer une classe
App
qui s'étendandroid.app.Application
Modifier votre
AndroidManifest.xml
's<application>
balise l'attributandroid:name="your.package.name.App"
.Tout moment vous avez besoin le contexte de l'application, juste obtenir à partir
App.context
.Application
est toujours initialisée en premier lieu, si votre processus est exécuté, si c'est une activité, un service, ou de quelque chose d'autre. Vous aurez toujours accès au contexte de l'application.Context
de la classe ou de ses sous-classes. Mais supposons que vous créez une classe qui remplaceAsyncTask
pour faire des trucs dans votre application. Et tu veux manipuler l'INTERFACE utilisateur dansonPostExecute
par exemple. De toute façon, je pense que la vie serait plus facile sigetApplicationContext
étaient statiques.App.context
, mais il serait nulle. Je suppose que le cadre concepteurs décidé que c'était une mauvaise forme.Do not place Android context classes in static fields; this is a memory leak (and also breaks Instant Run)
. Est-ce vraiment la meilleure façon de mettre en contexte mondial variable?AsyncTask
. Si elle est appelée dans, disons,RandomActivity
, utilisezRandomActivity.this.getApplicationContext()
.Il y a un seul contexte de l'application, de sorte que vous devriez obtenir le même. Vous ne pouvez avoir qu'un constructeur qui prend un
Context
, vous n'avez pas vraiment besoin de deux. Ou si vous voulez assurez-vous que vous obtenez le contexte de l'application, et non pas, disons, une activité, vous pouvez avoir votre constructeur de prendreApplication
comme un paramètre qui est uneContext
.Vous pouvez aller pour
getApplicationContext()
si vous voulez les mettre en contexte d'ensemble de l'application. Si vous souhaitez obtenir contexte de la classe, vous pouvez utilisergetBaseContext()
à la place.J'ai adapté yuku de répondre par un non-statiques directement référence au contexte.
Créer une classe
domain.company.pseudo.ApplicationName
qui s'étendandroid.app.Application
.Dans cet exemple, mon dossier de demande nom est
hypersoft.systems.android.starbox
.Maintenant, modifiez votre AndroidManifest.xml
<application>
balise le attributandroid:name="hypersoft.systems.android.Starbox"
, et être sûr que laStarbox.java
fichier de classe est situé dans la composante du projet de répertoire:android
plutôt questarbox
.Avec tout cela fait, vous pouvez maintenant
import hypersoft.systems.android.Starbox
, et dans votre code, vous pouvez obtenir leApplicationContext
en appelantStarbox.instance.getApplicationContext()
Réussi à compiler avec les outils de construction de 26 et de l'api 26 (Android 8.0) avec min sdk de la version 14 (4.0).
Le Contexte de l'Application ajouter un Contexte d'Activité les deux sont différents.Passer est risqué .Utilisez ce code pour utiliser le contexte de l'objet .
Dans Vos Activités, et dans les fragments de la Classe :
Conetext context=App.context;