Obtenir le contexte de L'Application
Dans mon application android, j'ai un constructeur qui utilise:
activity.getApplicationContext()
l'activité est transmise au constructeur comme paramètre.
le problème est que j'appelle cette classe à partir d'un Service. Si je fais un second constructeur qui accepte le service comme paramètre et utilise service.getApplicationContext
? Est-ce que j'aurai le même contexte d'application?
6 réponses
est-ce que j'aurai le même contexte d'application?
Oui. Vous pouvez consulter la documentation android, ils ont fourni
getApplicationContext()
renvoie le contexte de l'Application globale unique du processus courant.
Donc il ne devrait pas être modifié pour l'ensemble du processus de demande.
Veuillez également prendre note de ceci:
getApplicationContext()
généralement ne doit être utilisé que si vous avez besoin d'un Contexte dont le cycle de vie est distinct du contexte actuel, qui est lié à la durée du processus plutôt qu'à la composante actuelle.
corrigez-moi si je me trompe.
Merci
la façon la plus simple d'obtenir le contexte de l'application est:
Créer une classe App
qui s'étend android.app.Application
public class App extends Application {
public static Context context;
@Override public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
}
Modifier AndroidManifest.xml
<application>
balise pour avoir l'attribut android:name="your.package.name.App"
.
chaque fois que vous avez besoin du contexte de l'application, Obtenez-le de App.context
.
Application
est toujours initialisé d'abord que votre processus s'exécute, qu'il s'agisse d'une activité, d'un service ou d'autre chose. Vous aurez toujours accès à l'application cadre.
il n'y a qu'un seul contexte d'application, donc vous devriez obtenir le même. Vous pouvez avoir juste un constructeur qui prend un Context
, vous n'avez pas vraiment besoin de deux. Ou si vous voulez vous assurer que vous obtenez le contexte d'application, et pas, disons, une activité, vous pouvez faire prendre votre constructeur Application
comme paramètre qui est un Context
.
Vous pouvez aller pour getApplicationContext()
si tu veux les mettre en contexte d'ensemble de l'application. Si vous souhaitez obtenir contexte de la classe, vous pouvez utiliser getBaseContext()
à la place.
j'ai adapté la réponse de yuku avec une référence de contexte directe non statique.
Créer une classe domain.company.pseudo.ApplicationName
extendsandroid.app.Application
.
package hypersoft.systems.android;
import android.app.Application;
public class Starbox extends Application {
public static Starbox instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
}
dans cet exemple, le nom de ma trousse de demande complète est hypersoft.systems.android.starbox
.
maintenant, modifiez votre AndroidManifest.xml <application>
balise l'attributandroid:name="hypersoft.systems.android.Starbox"
, et s'assurer que l' Starbox.java
fichier de classe est situé dans la composante du projet de répertoire: android
plutôt que de starbox
.
Avec tout cela fait, vous pouvez maintenant import hypersoft.systems.android.Starbox
, et dans votre code, vous pouvez obtenir le ApplicationContext
en appelant Starbox.instance.getApplicationContext()
compilation réussie avec build tools 26 et api 26 (Android 8.0) avec min sdk version 14 (4.0).
contexte de L'Application Ajouter contexte de l'activité les deux sont différents.Passer est risqué .Utilisez ce code pour utiliser l'objet contextuel .
public class App extends Application {
public static Context context;
@Override public void onCreate() {
super.onCreate();
context = getApplicationContext();
}
}
dans vos activités et dans la classe des fragments:
Conetext context=App.context;