Usar variables estáticas en Android

En Android, ¿están utilizando variables estáticas una práctica recomendada? Por ejemplo, al implementar un patrón de Singleton en Java, suelo hacerlo:

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

Además, ¿cuándo se limpia con la JVM de Android?

Gracias.

static campos static se adjuntan a la instancia de la Class como un todo, que a su vez se adjunta al ClassLoader que cargó la clase. the_instance se descargará cuando se the_instance todo el ClassLoader . Estoy 90% seguro de que esto sucede cuando Android destruye la aplicación (no cuando se queda en segundo plano o hace una pausa, pero se cierra por completo).

Por lo tanto, piense que es vivir mientras se ejecuta su aplicación. ¿Es Singleton una buena idea? La gente tiene diferentes puntos de vista. Creo que está bien cuando se usa apropiadamente, yo mismo. No creo que la respuesta cambie mucho en Android. El uso de la memoria no es el problema per se; si necesita cargar un montón de cosas en la memoria, eso es un problema o no, independientemente de si encapsula los datos en un Singleton.

Creo que las variables estáticas están bien.

Esto es lo que dice el documento de Android:

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

¿Cómo paso datos entre Actividades / Servicios dentro de una sola aplicación?

Un campo / método público estático

Una forma alternativa de hacer que los datos sean accesibles en Actividades / Servicios es usar campos y / o métodos públicos estáticos. Puede acceder a estos campos estáticos desde cualquier otra clase en su aplicación. Para compartir un objeto, la actividad que crea su objeto establece un campo estático para apuntar a este objeto y cualquier otra actividad que quiera usar este objeto solo accede a este campo estático.

No estoy seguro de si ese enfoque es bueno para la plataforma móvil donde tienes memoria limitada disponible para ti. Sin mencionar que la aplicación se ejecutará en un dispositivo habilitado para tareas múltiples.

Creo que este enfoque puede acaparar la memoria del dispositivo, pero no tengo ningún documento que lo soporte. Tal vez alguien que es más educado que yo puede compartir sus pensamientos.

No. ¡No lo hagas! ¡Singleton es un antipatrón! . En su lugar, use la dependency injection, ya sea a través de un marco (como a través de Dagger o Roboguice ) o pasando explícitamente el objeto instanciado.