57 votes

À l'aide de variables statiques dans Android

Dans android, utilisez des variables statiques, une pratique recommandée? E. g, la mise en œuvre d'un pattern Singleton en Java, j'ai l'habitude de faire:

private static A the_instance;
public static A getInstance() {
    if (the_instance == null) {
       the_instance = new A();
    }
    return the_instance;
}

Aussi, quand cela est nettoyé par le Android JVM?

Je vous remercie.

65voto

Sean Owen Points 36577

static champs sont attachés à l' Class de l'instance dans son ensemble, qui est à son tour relié à l' ClassLoader qui a chargé la classe. the_instance seraient déchargés lorsque l'ensemble de l' ClassLoader est récupéré. Je suis sûr à 90% de ce qui se passe quand Android détruit l'application (pas quand il va dans l'arrière-plan, ou des pauses, mais est complètement à l'arrêt.)

Donc, pensez à elle comme à la vie, à condition que votre application s'exécute. Est Singleton une bonne idée? Les gens ont des opinions différentes. Je pense que c'est bien utilisées de façon appropriée, moi-même. Je ne pense pas que la réponse change beaucoup sur Android. L'utilisation de la mémoire n'est pas le problème en soi; si vous avez besoin de charger un tas de trucs dans la mémoire, c'est soit un problème, soit il ne l'est pas, peu importe si vous encapsuler les données dans un Singleton.

15voto

user256239 Points 3579

Je pense que les variables statiques sont OK.

C'est ce que Android doc a dit:

http://developer.android.com/guide/appendix/faq/framework.html

Comment puis-je transférer des données entre les Activités/Services au sein d'une seule application?

Un public static field/méthode

Une autre façon de rendre les données accessibles à travers les Activités/Services est d'utiliser les champs statiques et/ou des méthodes. Vous pouvez accéder à ces champs statiques de toute autre classe dans votre application. Pour partager un objet, l'activité qui crée votre objet définit un champ statique au point de cet objet et de toute autre activité qui veut utiliser cet objet seulement accède à ce champ statique.

0voto

RobGThai Points 2314

Je ne sais pas si une telle approche est bonne pour la plate-forme mobile où vous avez peu de mémoire disponible pour vous. Pour ne pas mentionner que l'application sera exécutée sur un multi-tâches appareil compatible.

Je pense que, cette approche peut porc de la mémoire de l'appareil mais je n'ai aucun document à l'appui de cette. Peut-être quelqu'un qui est plus instruit que moi, de partager leurs pensées.

-6voto

Michael Aaron Safyan Points 45071

Pas de. Ne pas le faire! Utiliser Google Guice (il fonctionne sur Android, Java SE, Java EE, GWT, et est utilisé dans de nombreuses applications Google, de sorte que vous savez cela fonctionne bien). Pour commencer avec Guice, regarder le suivant:

Singleton est une conception anti-modèle, et vous devriez envisager d'utiliser l'injection de dépendance, à la place. Ces vidéos vont à expliquer pourquoi les singletons sont mauvais, et comment vous pouvez les éviter en utilisant Guice.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X