J'ai une classe de préférences statique qui contient certaines préférences d'application et des choses comme ça. Est-il correct de stocker la référence à ApplicationContext là? J'ai besoin de cette référence afin que je puisse obtenir le dossier de cache et des choses comme ça dans les classes qui n'héritent pas d'activité.Android - stocker des références à ApplicationContext
Répondre
Vous avez raison d'utiliser le ApplicationContext
depuis si vous n'avez pas it can cause significant memory leaks.
Toutefois, le problème que vous avez est que la variable static
peut ne pas conserver sa valeur. En raison de la façon dont Android gère les applications, il est possible que votre application soit supprimée puis redémarrée - généralement parce que l'utilisateur passe à d'autres applications - de sorte que votre variable static
devienne nulle et votre code qui la définit ' t être exécuté. Have a look at this question for a more detailed answer.
Il est peut-être possible de contourner ce problème, mais tester toutes les possibilités qui peuvent entraîner la fin de votre variable null
serait long et sujet aux erreurs. Donc, dans mes classes de préférences statiques, j'ai fait l'une des méthodes qui nécessitent un Context
le prendre comme argument. Par exemple:
static int getSomeIntegerPreference(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getInt(PREFERENCE_SOME_INTEGER, 0);
}
Il est moche, mais cela fonctionne.
- 1. Comment stocker des références dynamiques à des parties d'un texte
- 2. Printemps applicationcontext chargement des crochets
- 3. stocker des images sur android
- 4. android références mondiales excessives
- 5. Ressources HTML Android avec des références à d'autres ressources
- 6. Java: meilleur type pour stocker des références de grille
- 7. Utilisation correcte de ApplicationContext?
- 8. Quitter Application from ApplicationContext
- 9. Spring ApplicationContext Bean Scope
- 10. problème applicationContext-service.xml définitions
- 11. Comment android stocker des dates sans année?
- 12. Lire et stocker des valeurs - Android
- 13. ApplicationContext ctx = nouvelle erreur FileSystemXmlApplicationContext
- 14. Puis-je stocker des références AVAudioPlayer dans un NSMutableArray et les lire à volonté?
- 15. Android - Où stocker les bitmaps générés?
- 16. Tomcat ApplicationContext getInitParameter lance NullPointerException
- 17. Perl: Puis-je stocker des références arrières (et non leurs valeurs) dans des variables?
- 18. Strange chemin références à des fichiers Javascript?
- 19. Libérer des objets à références multiples
- 20. Suivi des références à un service
- 21. Trouvé des références partagées à une collection
- 22. Comment puis-je stocker une liste de références en Perl?
- 23. Atomicité des références d'objet
- 24. stocker des données d'application Android sur la carte SD
- 25. Spring.Net: Inject ApplicationContext/ObjectFactory proprement dit
- 26. stocker des images et des fichiers audio à distance dans Android
- 27. Conserver des références d'objet
- 28. Comment puis-je stocker et récupérer des préférences dans Android?
- 29. Comment stocker des données dans un fichier plat sous Android?
- 30. Enregistrer des références à une variable dans NSMutableArray
Eh bien, j'ai défini mes Preferences.applicationContext à getApplicationContent() au premier démarrage de l'activité. Donc je pense que ça devrait être là sauf si l'application meurt (VM meurt, le processus devient tueur, etc.). Et s'il meurt, au prochain démarrage, il initialisera à nouveau Preferences.applicationContext, donc je pense que cela devrait fonctionner. J'ai besoin de quelque chose comme ça, car j'ai besoin d'accéder au contexte dans certaines classes qui ne voient pas getApplicationContext(). Par exemple, ma classe de catégorie a besoin de télécharger des icônes pour chaque catégorie, donc j'ai mis icon_path à cela. filepath = Preferences.applicationContext.getCacheDir(). ToString – nixa
Vous devez initialiser 'Preferences.applicationContext' dans * chaque * activité utilisant votre classe' Preferences'. Votre processus peut être tué lorsque vous exécutez une activité différente de votre première activité et Android peut renvoyer l'utilisateur à ce point dans votre application, en ignorant la première activité. –