2010-04-20 9 views
14

manteniendo mi pregunta corta, he creado una aplicación con 3 actividades, donde A - lista de categorías, B - lista de elementos, C - elemento individual. Los datos que se muestran en B y C se analizan desde XML en línea. Pero, si reviso A -> B1 -> C, luego regreso a A y luego regreso a B1, me gustaría tener sus datos en caché en algún lugar para no tener que volver a solicitar el XML.¿Una buena forma de almacenar datos en caché durante el ciclo de vida de la aplicación Android?

Soy nuevo en la programación de Android y Java, he buscado mucho en Google y todavía no puedo encontrar (o simplemente no tengo ni idea de dónde buscar) una forma de hacer lo que quiero.

¿Sería una buena idea almacenar todos los datos recibidos en la actividad principal A (HashMaps? ContentProviders?) Y luego pasar a B y C (si reciben la misma solicitud que antes)

Respuesta

13

Una manera simple y rápida para almacenar en caché información o para realizar un seguimiento del estado de la aplicación, es extender la Aplicación como se describe en this blog post .

posterior

Este blog se olvida de añadir que usted tiene que configurar su CustomApplication clase en el manifiesto, como:

<application [...] android:name="CustomApplication"> 

En mis proyectos me quedo con el estilo singleton a través de getInstance.

Más recursos: this answer, Global Variables in Android Apps y this blog post.

+0

Gracias a la primera persona que hable sobre el manifiesto, creo que no agregarlo provoca una excepción de lanzamiento. –

-1

Puede hacer uso de almacenamiento de datos como se explica en Android referencia aquí http://developer.android.com/guide/topics/data/data-storage.html

+0

Es una opción, pero tendré que preocuparme por el vaciado de datos al final de vida útil de la aplicación? – sniurkst

+5

¿No es una buena idea mantener los datos almacenados en caché incluso después del final de la vida útil de la aplicación? – the100rabh

+0

Se desaconsejan las respuestas de solo enlace. –

2

Si desea construir algún tipo de memoria caché en la memoria, considere el uso de un Mapa con SoftReferences. Las referencias suaves son un tipo de referencias que tienden a mantener sus datos por un tiempo, pero no evitan que sean basura.

La memoria en un teléfono celular es escasa, por lo que mantener todo en la memoria puede no ser práctico. En ese caso, es posible que desee guardar sus cachés en el almacenamiento secundario del dispositivo.

Consulte MapMaker en Google's Collections, que le permite construir cómodamente una memoria caché de 2 niveles. Considerar hacer esto:

/** Function that attempts to load data from a slower medium */ 
Function<String, String> loadFunction = new Function<String, String>() { 
    @Override 
    public String apply(String key) { 
     // maybe check out from a slower cache, say hard disk 
     // if not available, retrieve from the internet 
     return result; 
    } 
}; 

/** Thread-safe memory cache. If multiple threads are querying 
* data for one SAME key, only one of them will do further work. 
* The other threads will wait. */ 
Map<String, String> memCache = new MapMaker() 
           .concurrentLevel(4) 
           .softValues() 
           .makeComputingMap(loadFunction); 

Acerca de caché en el almacenamiento secundario del dispositivo, echa un vistazo a Context.getCacheDir(). Si eres tan descuidado como yo, simplemente deja todo allí y espera que el sistema lo limpie cuando necesite más espacio: P

+0

Creo que este es el camino correcto, pero un poco viejo ... ¿Alguna novedad acerca de la aplicación de 2 niveles + caché de almacenamiento? – Motheus

+0

Como explica [la documentación oficial de la API de Android para SoftReference] (http://developer.android.com/reference/java/lang/ref/SoftReference.html), no es una buena idea usar SoftReferences para compilar un caché. – herman

Cuestiones relacionadas