Actualmente estoy enfrentando un problema donde debo almacenar mi estructura de objetos en el dispositivo Android.¿Dónde almacenar grandes datos de aplicaciones en dispositivos Android?
El uso: estoy comenzando una llamada a un servidor de aplicaciones (con la gran ayuda de AsyncTask), obtengo una respuesta conocida (xml-response) del servidor, analizo los datos y los transformo finalmente en mi estructura de objeto (diagrama de clase altamente complejo con muchas asociaciones entre las clases). Hasta el momento se está trabajando, gracias a la gran XMLPullParser;) Me pregunto dónde almacenar (y por supuesto comparto) los datos captados entre mis actividades ... ya sé que puedo usar SQLite, pero no tienen una or-mapper (como hibernate en el entorno j2ee). Tampoco puedo almacenar estos datos confidenciales en el dispositivo (en sqlite o en el sistema de archivos), así que mi primer enfoque fue almacenar estos datos en un singleton (que es de fuente retenida en la memoria ...). Pero, ¿qué sucede cuando el sistema tiene poca memoria? ¿Puede Android "destruir" los datos almacenados en mi singleton? Ya leí sobre la extensión de la clase android.app.Application ... Entonces, ¿cuál es la mejor manera de almacenar datos de objetos de forma segura (llamada desde "servicio web") en dispositivos Android?
Por cierto: el desarrollo de Android es que cool! Actualmente estamos portando una aplicación Windows Mobile 6.5 a Android y iPhone, y mi colega (responsable de iPhone-dev) se queja todo el tiempo ^^
Hola nailuj, gracias por su respuesta detallada! Así que creo que la única forma es almacenar los datos extendiendo la clase de aplicación android.app.apply porque esta es la única posibilidad donde puedo almacenar "de manera segura" los datos obtenidos en poca memoria (el uso de mi propia implementación de singleton no lo sabrá cuando el sistema mata la aplicación). ¿Qué hay de serializar los datos y almacenarlos con javax.crypto en el sistema de archivos y volver a cargar esos datos cuando la memoria está disponible (o se restaura el estado de la aplicación)? –
@ tim.kaufner: sí, es por eso que mencioné 'javax.crypto'. Si nada más es una solución "suficientemente segura", puede usarla para encriptar sus datos y almacenarlos en el Almacenamiento interno (o en una base de datos SQLite para el caso). Aparte de agregar una capa adicional de cifrado/descifrado, en realidad no es diferente para la forma en que normalmente manejaría el estado en una aplicación de Android (persista cualquier información que quiera conservar en 'onPause()' y vuelva a cargarla ' onCreate() 'etc.) – Nailuj
voy a darle una oportunidad :) Gracias también para mencionar la biblioteca OrmLite, no sabía que había un "portátil" O-Mapper, pero yo prefiero el almacenamiento de los datos en el sistema de archivos o (si está montado) en la SD externa tarjeta. Pero no estoy seguro de si la serialización/deserialización de grandes conjuntos de objetos es rápida en este tipo de dispositivos ... Lo intentaré y veré qué sucede :) –