Persistencia en Windows Phone

Introducción

 

Existen varias formas de almacenar información local o distribuida en la plataforma Windows Phone, sin embargo cuando las aplicaciones requieren guardar el estado de una aplicación se aconseja utilizar el Isolated Storage (almacenamiento aislado). Cuando se habla de estado de la aplicación se refiere a información ligera suficiente para que la aplicación sea configurada o suficiente para que la aplicación restaure los datos desde un punto de operación.

 

El Isolated Storage le permite a una aplicación de código manejado guardar y recuperar información desde un almacén local (Figura 1). Esta arquitectura impide que la aplicación acceda al sistema de archivos de Windows de forma directa, es decir, cada aplicación puede acceder únicamente a su scope.

 

Figura 1. Arquitectura del Isolated Storage.

 

Modelo de Objetos

 

Cada aplicación tiene acceso a sus parámetros de configuración (Settings) y a los archivos que necesita. La cuota del Isolated Storage depende del tamaño total del espacio disponible. El modelo de objetos para la operación de I/O es heredado de Silverligth 3. A continuación se mostrarán las clases del namespace System.IO.IsolatedStorage que nos servirán para persistir archivos, directorios y la configuración.

 

 

Clase IsolatedStorageFile

 

Es la clase que abstrae el almacenamiento físico aislado a un sistema virtual de archivos. Esta clase te permite hacer todas las operaciones de I/O en archivos y directorios que tu aplicación necesita. En el siguiente ejemplo se muestra como crear un directorio y como crear un archivo dentro de ese directorio:

 

publicvoid IsolatedStorageFile()

        {

            // Obtenemos el isolated store para la aplicacion.           

            using (var store = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication())

            {

                // Use a StringBuilder to construct output.

                StringBuilder sb = newStringBuilder();

 

                // Directorio raíz.

                store.CreateDirectory(“RootDir”);

 

                // Subdirectorio bajo el directorio raíz.

                string subdirectory1 =System.IO.Path.Combine(“RootDir”, “SubDir”);

                store.CreateDirectory(subdirectory1);

 

                // Creacion de archivo en RootDir.

                IsolatedStorageFileStream rootFile = store.CreateFile(“ArchivoEnRaiz.txt”);

 

                    //Escribimos en el archivo

                    byte[] buffer=newbyte[50];

                    string text=“Hola Mundo!”;

 

                buffer = System.Text.UTF8Encoding.Unicode.GetBytes(text);

                    rootFile.Write(buffer, 0, buffer.Length);

                rootFile.Close();

 

             }

        }

 

 

 Clase IsolatedStorageFileStream

 

Es la versión para Windows Phone de la clase FileStream. Contiene métodos de lectura, escritura, manipulación de atributos, etc. En el ejemplo anterior podemos ver este tipo en acción.

 

El almacenamiento se guarda en el sistema de archivos físico de forma ofuscado, por lo cual no es recomendable acceder directamente (sin usar los métodos de esta API) a los archivos.

 

  

Clase IsolatedStorageSettings

 

Diccionario para guardar datos de configuración en la forma llave/valor; los valores deben ser de tipo string como en el ejemplo a continuación:

 

IsolatedStorageSettings.ApplicationSettings[“llave”] = valor;

 

 

Si requieres persistir tipos de dato personalizado utilizando cadenas de texto, debes escribir un serializador que utilice JSON para convertir documentos (cadenas de texto) en tipos  como se muestra a continuación:

 

        privatestatic T Deserialize<T>(string jsonString)

        {

            using (MemoryStream ms = newMemoryStream(Encoding.Unicode.GetBytes(jsonString)))

            {

                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));

                return (T)serializer.ReadObject(ms);

            }

        }

 

        privatestaticstring Serialize(object objectToSerialize)

        {

            using (MemoryStream ms = newMemoryStream())

            {

                DataContractJsonSerializer serializer = new DataContractJsonSerializer(objectToSerialize.GetType());

                serializer.WriteObject(ms, objectToSerialize);

                ms.Position = 0;

 

                using (StreamReader reader = newStreamReader(ms))

                {

                    return reader.ReadToEnd();

                }

            }

        }

 

 

Los métodos serializar y de serializar anteriores te servirán para convertir cualquier tipo a texto para persistirlo en el ApplicationSettings.

 

 

El objeto ApplicationSettings es semejante al Application de ASP.Net y es igual en desarrollo de Widgets (Windows Mobile 6.5) a los siguientes métodos:

 

widget.setPreferenceForKey(valor, “llave”);

widget.preferenceForKey(“llave”);

 

 

Si has desarrollado antes Widgets encontrarás que no solo la persistencia local es muy parecida al Isolated Storage, estas características también son semejantes (Figura 2):

·         Experiencia local de contenido web y foco en el consumidor final.

·         Ejecución dentro de un sandbox para no acceder a los recursos del sistema operativo.

·         Hosteado en Internet Explorer.

·         Soporte de tecnología Web reciente: AJAX, JSON, etc.

·         Distribución a través del MarketPlace.

 

Figura 2. Similitud del Modelo de aplicaciones de Windows Phone con los Widgets.

 

Para demostrar la persistencia he escrito una aplicación (Figura 3) que pueden descargar aquí.

  

Figura 3. Aplicación de demostración.

 

 

 

Conclusiones

 

 

·         La persistencia local sirve para guardar datos de configuración y mantener el estado de la aplicación en archivos de recursos (texto, imágenes, directorios, etc).

·         El sistema de archivos del sistema operativo se abstrae en un sistema virtual.

·         Si has desarrollado Widgets para Windows Mobile 6.5 encontrarás muchas similitudes en el desarrollo de aplicaciones Silverligth para Windows Phone.

 

 

Saludos,

 

Javier Andrés Cáceres Alvis

http://speechflow.spaces.live.com/

http://software.intel.com/en-us/blogs/author/javierandrescaceres/

About these ads

2 responses to this post.

  1. Posted by Mauricio on 14 abril, 2010 at 9:55

    Muy interesante y util Javier, gracias por compartir la info.att: Mauricio Ramos.

    Responder

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 234 seguidores

%d personas les gusta esto: