Utilisation de variables statiques dans Android

Dans Android, utilisez-vous des variables statiques comme une pratique recommandée? Par exemple, en implémentant un modèle Singleton en Java, je le fais généralement:

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

De plus, quand cela est-il nettoyé par la JVM Android?

Je vous remercie.

static champs static sont attachés à l’instance de Class dans son ensemble, qui est à son tour attachée au ClassLoader qui a chargé la classe. the_instance serait déchargé lorsque le ClassLoader entier ClassLoader récupéré. Je suis sûr à 90% que cela se produit lorsque Android détruit l’application (pas quand elle entre en arrière-plan ou s’arrête, mais s’arrête complètement).

Alors, pensez-y comme vivant tant que votre application fonctionne. Singleton est-il une bonne idée? Les gens ont des points de vue différents. Je pense que c’est bien quand utilisé correctement, 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 choses en mémoire, c’est soit un problème, soit que vous encapsulez les données dans un Singleton.

Je pense que les variables statiques sont correctes.

Voici ce que dit Android doc:

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

Comment transférer des données entre Activités / Services dans une seule application?

Un champ / une méthode statique publique

Une autre manière de rendre les données accessibles dans Activités / Services consiste à utiliser des champs et / ou des méthodes statiques publics. Vous pouvez accéder à ces champs statiques à partir de toute autre classe de votre application. Pour partager un object, l’activité qui crée votre object définit un champ statique pour pointer vers cet object et toute autre activité qui souhaite utiliser cet object accède simplement à ce champ statique.

Je ne suis pas sûr si une telle approche est bonne pour la plate-forme mobile où vous avez une mémoire limitée à votre disposition. Sans compter que l’application sera exécutée sur un appareil compatible avec plusieurs tâches.

Je pense que cette approche peut réduire la mémoire de l’appareil, mais je n’ai aucun document pour le supporter. Peut-être que quelqu’un de plus éduqué que moi peut partager ses idées.

Non, ne le fais pas! Singleton est un anti-patern! . Au lieu de cela, utilisez l’dependency injection, que ce soit via un framework (par exemple via Dagger ou Roboguice ) ou en passant explicitement l’object instancié.