2012-09-08 11 views
5

Me han dicho recientemente que extender la clase de solicitud para utilizarla como singleton era una mala práctica pero sin ninguna explicación.
¿Cuáles son los posibles problemas detrás del uso de esta clase? Lo he visto usado en muchos proyectos.Ampliación de la clase de aplicación y buenas prácticas

Además, si utilizar la clase de aplicación es una mala idea, ¿cuáles son las alternativas para almacenar variables de nivel de aplicación?

Respuesta

2

El problema con el uso de una clase Singleton, así como extender la clase Application, es que si el proceso de solicitud se cancela, lo que es muy probable que suceda cuando la aplicación queda demasiado tiempo en el fondo, el objeto perderá todo tu información.

Sin embargo, utilizar la clase Application puede ser una buena opción en los casos en que su aplicación está en primer plano o no permanece demasiado en segundo plano (aunque no es 100% libre de riesgos). Como alternativa, puede guardar los datos en SharedPreferences, o si su objeto es más complejo, guárdelo en un database.

Otra opción sería combinar el uso de Application, más SharedPreferences por ejemplo. Primero intente recuperar la variable de la instancia Application, si la variable es nula, luego recupérela de SharedPreferences.

+0

Gracias por la respuesta. Creo que iré por el enfoque híbrido. No soy muy partidario de leer datos del disco cuando es evitable. – Teovald

7

El uso de un enfoque Singleton no es realmente una mala idea, pero puede ser problemático en los casos cuando se utiliza en un entorno de subprocesos múltiples donde un subproceso establece un valor para una variable y el otro subproceso puede escribir en exceso valor sin previo aviso.

Sin embargo, con el fin de conservar instancias de nivel de aplicación/las variables, se sugiere que se extienden Application clase y lo definen en su AndroidManifest.xml como el que viene por defecto. Dado que el contexto de la aplicación se crea solo una vez (hasta que la aplicación se esté ejecutando y permanezca en la memoria) cuando inicie esa aplicación, entonces puede definir algunas variables dentro de esa clase para que estén disponibles en cualquier parte del código de la aplicación utilizando métodos públicos.

Además, también puede usar su clase de aplicación como Singleton, ya que se garantiza que se creará una sola vez cuando se lance.

+0

Utilicé el enfoque singleton y me funcionó muy bien. Sin embargo, como dijiste, ten cuidado en entornos de subprocesos múltiples. –

Cuestiones relacionadas