2011-05-19 7 views
9

¿Cuál es la mejor manera de guardar los datos almacenados en la clase de aplicación (singleton) de una aplicación de Android?Android: la mejor manera de guardar los datos almacenados en la aplicación Singleton Class

Tengo una gran aplicación silenciosa que comparte mucha información entre las actividades. Así que la mayor parte se almacena en la aplicación Singleton.

Todo funciona bien ... la aplicación se apaga por el sistema operativo en la memoria baja ... luego cuando vuelve intenta reanudar la actividad sin éxito debido a la falta de datos necesarios que estaba antes en la aplicación.

Debido a la falta de un método muy apreciado (y necesario) para guardar datos en la aplicación de acuerdo con su experiencia, ¿cuáles son los mejores enfoques?

¿Puedo guardar cosas, además de las cadenas "normales", booleanos, etc., como mapas de bits?

ya he visto este How to declare global variables in Android? pero la cuestión no se centra en lo que es importante en este caso, la forma de guardar los datos cuando la aplicación se mató por falta de memoria ...

Respuesta

17

Al igual que con muchas preguntas, no hay una respuesta simple. Hay muchas maneras de guardar datos y cada uno tiene sus ventajas y desventajas. El "mejor" enfoque dependerá de sus necesidades particulares. Usted tiene todas las opciones aquí: http://developer.android.com/guide/topics/data/data-storage.html

  • Durante unos pequeños mapas de bits,, es posible codificar y almacenarlos en el SharedPreferences.
  • Para más y más grandes imágenes, usted tiene dos opciones
    1. una columna BLOB en un database
    2. guardarlas como archivos en su internal storage y mantener todos los enlaces en sus preferencias.

SharedPreferences tiendas de cadenas, por lo que cualquier cosa que es una cadena que se pueden almacenar, incluyendo cualquier objeto serializado/codificado. De acuerdo con this post, no existe un límite de tamaño codificado para una cadena serializada en SharedPreferences, pero se basa en el límite de tamaño de cadena. Sin embargo, this other post señala que todo el objeto SharedPreferences se escribe como un único archivo xml, por lo que debe intentar mantener su tamaño al mínimo.

JSON objeto (o usando GSON según lo sugerido por katit) son una buena opción ligera, pero el enfoque que tomaría es guardarlos en el almacenamiento interno de datos (a menos que los datos es muy grande, es decir, muchos megabytes , y prefiere el almacenamiento externo) y mantenga los enlaces solo en las Preferencias Compartidas.No sé cómo son sus objetos, pero si pueden reducirse a un conjunto de componentes más simples, puede considerar una base de datos para ellos (es decir, una fila por objeto, una columna por campo, incluyendo tal vez algunos blobs) .

El archivos vs base de datos enfoque dependerá también de cuántas veces planea acceder a esos objetos. Si se leerán una o dos veces solamente y luego desaparecerán, entonces elegiría los archivos sobre la molestia de la base de datos y sus cursores. Elegiría un DB si hubiera muchas lecturas, y tal vez necesite una búsqueda más rápida mediante consultas.

Consulte también esta publicación: http://android-developers.blogspot.in/2009/02/faster-screen-orientation-change.html para una opción específica de la actividad.

+0

Creo que esta publicación es la más sensata. Todas las cadenas y booleanos se pueden almacenar fácilmente en 'SharedPreferences' y luego los mapas de bits solo se pueden almacenar en el almacenamiento externo con el URI en' SharedPreferences'. – hwrdprkns

+0

¿Qué pasa con los objetos personalizados, también se pueden serializar y almacenar en SharedPreferences, ¿no? – neteinstein

+0

@NeTeInStEiN Respuesta actualizada con algunos conceptos más – Aleadam

1

No es serializador Java , no estoy seguro de eso es lo que necesitas

Yo personalmente uso GSON para todo eso. Es la biblioteca de google para trabajar con JSON. Permite serializar objetos en una representación de cadena eficiente.

Lo usé principalmente para la comunicación de servicio RESTful, pero luego aprendí que funciona muy bien para almacenar la representación de objetos en SQLLite o lo que sea. Puedo inflar objetos muy fácil de esta manera.

+0

Agradable. ¿Puedes señalarme un ejemplo? – neteinstein

+0

Alguna información aquí: http://benjii.me/2010/04/deserializing-json-in-android-using-gson/ Dudé acerca de incluir JAR adicional pero lo uso más y más. No estoy seguro de lo malo que es eso para la batería, etc. pero definitivamente es fácil de usar: http://code.google.com/p/google-gson/ – katit

2

Es importante tener en cuenta que si está utilizando una clase singleton para almacenar su información y su aplicación se ve forzada a detenerse, la información se borrará.

Para las preferencias compartidas, la información seguirá siendo la misma.

Espero que esto ayude.

Cuestiones relacionadas