Windows Phone –Tutorial XI Tombstoning

Tombstone para Windows Phone no es el deporte de saltar al mar desde un acantilado

En Windows Phone hablamos de el en Windows Phone 7 – Tutorial III–Modelo de Ejecución. En Windows Phone solo se permite una aplicación corriendo a la vez, todavía no hay la multitarea aunque la prometen en la siguiente versión a principios del año que viene, por ahora nos conformaremos con que nuestras aplicaciones no tiene multitarea.

Si abrimos el fichero app.xaml.cs vemos que tenemos 4  métodos vacíos pero que van a ser importantes para entender el concepto de Tombstoning, estos métodos son:

  • Application_Launching
  • Application_Activated
  • Application_Deactivated
  • Application_Closing

Utilizaremos la aplicación que hemos hecho en el articulo sobre Launchers, vamos a introducir en estos métodos una traza para ver cuando se lanzan, para esta traza utilizaremos la clase Debug

Debug.WriteLine("Debug Application_Launching:" + DateTime.Now.ToLongTimeString());

  • Si ejecutamos la aplicación y pulsamos al botón la flecha de retroceso del teléfono, las trazas que se generan son

                Debug Application_Launching:7:22:38 PM
                Debug Application_Closing:7:22:45 PM

Se ha ejecutado el evento de Close al pulsar la flecha de retroceso desde la primera pantalla de la aplicación.

  • Ahora vamos a pulsar la tecla de Windows del teléfono, las trazas generadas son:

               Debug Application_Launching:7:25:25 PM
               Debug Application_Deactivated:7:25:40 PM

Se ha ejecutado en este caso el evento Deactivate en vez de Close

  • Si ahora lanzamos un Launcher de la aplicación

              Debug Application_Launching:7:30:36 PM
              Debug Application_Deactivated:7:30:47 PM

Se han ejecutado los mismo eventos que pulsando la tecla de Windows

Es decir nuestra aplicación es cerrada cuando el usuario desde la primera pagina de la aplicación pulsa la flecha de retroceso, en ese momento se cierra la aplicación, en los demás casos la aplicación se desactiva pudiéndose reactivar, este ultimo procesos de desactivación/reactivación  es el llamado Tomnstoning, que podemos ver en la figura de abajo.

tombstoninglifecycle

Justo antes de desactivar la aplicación podremos salvar el estado de la misma para que cuando se vuelva a activar mostremos al usuario la aplicación tal y como la había dejado. La idea es ayudar a la aplicación a dar la sensación de que ha continuado ejecutando como si nada a pesar de que fue, en efecto, eliminada temporalmente.

Para guardar el estado a la hora de desactivarse no utilizaremos el IsolatedStorage que vimos en el anterior post. Windows Phone nos proporciona la clase PhoneApplicationService.que tiene la propiedad Current y a su vez la propiedad State  que es un diccionario al estilo de IsolatedStorageSettings donde guardaremos pares de clave/valor en el evento Deactivate para luego en el Activate recuperar los valores.

El código seria muy sencillo

1 private void Application_Activated(object sender, ActivatedEventArgs e) 2 { 3 Debug.WriteLine("Debug Application_Activated:" + DateTime.Now.ToLongTimeString()); 4 IDictionary<string, object> state = PhoneApplicationService.Current.State; 5 if (state.ContainsKey("DateDeactivate")) 6 { 7 Debug.WriteLine("El valor de DateDeactivate:" + state["DateDeactivate"]); 8 } 9 } 10 11 // Code to execute when the application is deactivated (sent to background) 12 // This code will not execute when the application is closing 13 private void Application_Deactivated(object sender, DeactivatedEventArgs e) 14 { 15 string dateDeactivate = DateTime.Now.ToLongTimeString(); 16 Debug.WriteLine("Debug Application_Deactivated:" + dateDeactivate); 17 IDictionary<string, object> state = PhoneApplicationService.Current.State; 18 state["DateDeactivate"] = dateDeactivate; 19 20 } 21 22

Si ejecutamos la aplicación y para debugear pulsamos un botón de un Launcher como el de SearchTask y damos al botón de retroceso para que vuelva a la aplicación y se produzca el efecto Tombstoning

imageimage .

Los mensajes que se muestran de la traza del código vemos que es

Debug Application_Activated:10:05:53 PM

El valor de DateDeactivate:10:05:47 PM

Vemos que a la hora de activar la aplicación recuperamos el valor que hemos guardado al desactivar la aplicación.

Guardaremos en PhoneApplicationService aquellos datos que no estén asociados a una pagina, en cambio si queremos guardar datos asociados a una pagina como la posición de un scroll, los contenidos de un TextBox… Debemos de utilizar los eventos OnNavigatedTo y OnNavigatedFrom.

Una concepto importante que tenemos que tener en cuenta es que en PhoneApplicationService son datos transitorios para el efecto de Tombstoning si queremos datos permanentes para cuando se vuelva a encender la aplicación en el caso de que el usuario la cierre (evento Close) utilizaremos lo visto en el anterior post IsolatedStorage.

Si queréis debugear el efecto Tombstoning sin lanzar ningun Launcher o Chooser debéis de pulsar el botón de windows en el emulador y rápidamente el de retroceso, en este caso se lanzaran los eventos Deactivate y Activated

Espero que os haya ayudado a entender este concepto, importante para dar un experiencia correcta al usuario y para que os aprueben vuestra aplicación en el marketplace

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *