2010-11-23 18 views
7

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 ^^

Respuesta

2

En cuanto a un asignador O, me encontré con OrmLite el otro día. Es una herramienta ORM general para Java, pero también tiene algunas adaptaciones especiales que lo hacen funcionar para Android. Todavía no he tenido tiempo para probarlo, pero parece prometedor :)

En cuanto al almacenamiento de datos confidenciales en el teléfono, realmente no tiene la opción de almacenarlo solo en la memoria (usando algún tipo de singleton como sugirió). Tan pronto como su solicitud pasa a un segundo plano, se puede muerte de forma instantánea, por lo que tiene para persistir los datos que desea conservar de alguna manera. Dicho esto, si guarda los datos en Internal Storage, esto no estará disponible para ninguna otra aplicación en el teléfono (dado que el teléfono no está rooteado, porque si está rooteado, es fácil de usar). Creo que esto también vale para los datos que almacena usando SQLite, pero no estoy 100% seguro, así que no lo garantizaré.

Pero básicamente, si está seguro de que su aplicación sólo funcionará en dispositivos que no sean sus raíces, usted debe estar bastante seguro de guardar los datos en la memoria interna. Y si eso no es lo suficientemente bueno, ahí está el paquete javax.crypto, pero nunca lo he usado así que no puedo decir nada al respecto.

+1

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)? –

+1

@ 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

+1

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 :) –

Cuestiones relacionadas