Android: Mejor manera de guardar los datos almacenados en la clase Application Singleton

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

Tengo una gran aplicación tranquila que comparte muchos datos entre las actividades. Así que la mayor parte de ella se almacena en el Application Singleton.

Todo funciona muy bien .. util la aplicación es asesinada por el sistema operativo en la memoria baja … entonces cuando vuelve intenta reanudar la actividad sin éxito debido a la falta de datos necesarios que era 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 a su experiencia, ¿cuáles son los mejores enfoques?

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

Ya he visto esto Cómo declarar variables globales en Android? Pero la cuestión no es centrarse en lo que es importante en este caso, cómo guardar los datos cuando se cancela la aplicación debido a la memoria baja …

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

  • Para algunos, pequeños mapas de bits, puede codificarlos y almacenarlos en SharedPreferences .
  • Para más y más imágenes, tiene dos opciones
    1. Una columna de blob en una base de datos
    2. Guárdelos como archivos en su almacenamiento interno y guarde los enlaces en sus preferencias.

SharedPreferences almacena cadenas, por lo que cualquier elemento que sea una cadena se puede almacenar, incluyendo cualquier objeto serializado / codificado. De acuerdo con este post , no hay un límite de tamaño codificado para una cadena serializada en SharedPreferences, pero se basa en el límite de tamaño String. Sin embargo, este otro post señala que todo el objeto SharedPreferences está escrito como un único archivo xml, por lo que debe tratar de mantener su tamaño al mínimo.

El objeto JSON (o el uso de GSON como sugiere katit) son una buena opción de peso ligero, pero el enfoque que tomaría es guardarlos en el almacenamiento interno de datos (a menos que los datos sean realmente grandes, es decir, muchos megabytes, y usted prefiere el externo Almacenamiento) y mantener los enlaces sólo en SharedPreferences. No sé cómo son sus objetos, pero si pueden reducirse a un montón de componentes más simples, puede considerar una base de datos para ellos (es decir, una fila por objeto, una columna por campo, incluyendo quizás algunas blobs) .

El enfoque de archivos vs base de datos dependerá también de cuántas veces está planeando acceder a esos objetos. Si se leen una o dos veces y luego desaparecen, entonces yo elegiría archivos sobre la molestia de la base de datos y sus cursores. Yo elegiría un db si habrá muchas lecturas, y tal vez usted necesita una búsqueda más rápida mediante consultas.

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

No es serializador de Java, no está seguro de que es lo que necesita.

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

He utilizado esto principalmente para la comunicación de servicio RESTful, pero luego se enteró de que funciona muy bien para almacenar la representación de objetos a SQLLite o lo que sea. Puedo inflar el objeto muy fácil de esta manera.

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

Para las preferencias compartidas, la información permanecerá igual.

Espero que esto ayude.

  • Android MediaPlayer Singleton
  • Ciclo de vida de aplicaciones Android y singelton
  • ¿Es una práctica aceptable usar Objetos Singleton para guardar el estado o compartir datos entre Actividades?
  • Métodos estáticos o Singletons rendimiento-sabio (Android)?
  • Uso del patrón de diseño Singleton para SQLiteDatabase
  • Java.lang.IllegalStateException: La aplicación PagerAdapter cambió el contenido del adaptador sin llamar a PagerAdapter # notifyDataSetChanged android
  • Android Volley error en getInstance (este) al agregar ImageLoader
  • Variables estáticas, patrón y rendimiento de Android
  • Singletons vs. Contexto de la aplicación en Android?
  • Singletons vs. Contexto de la aplicación en Android?
  • Android: No se puede realizar esta operación porque se ha cerrado el grupo de conexiones
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.