El ciclo de vida de las Aplicaciones Metro es bastante distinto al que ha existido en las aplicaciones en Windows hasta ahora. Si en aplicaciones clásicas tenemos, fundamentalmente, dos estados consistentes en ejecución y cierre de la aplicación, en las Aplicaciones Metro vamos a tener varios estados extra, como se puede ver en la imagen.
Veamos cómo vamos a pasar de unos a los otros y qué condiciones se tienen que cumplir en cada caso.
Activación (Activated)
Para que se produzca una activación la aplicación debe estar en un estado de no ejecución. Este estado se produce, por ejemplo, cuando se acaba de instalar, cuando la máquina acaba de arrancarse o tras producirse una terminación (como veremos en un punto más adelante).
La activación puede producirse por varias circunstancias, como su lanzamiento a través del tile de la aplicación en la pantalla Start, o a través de la implementación de contratos como Search, File Picker, Share, etc. (veremos más sobre ello en próximos puntos). En todos los casos el resultado es el mismo, Windows activa la aplicación y ejecuta su código de carga.
En ese momento la aplicación tendrá 15 segundos para completar su activación. En caso de no hacerlo Windows matará la aplicación, evitando que el usuario espere indefinidamente delante de la pantalla inicial. De este modo cada desarrollador sabe que, por diseño, su aplicación tiene que ser rápida al cargarse, evitando “abusos” frente al usuario en forma de esperas indefinidas.
Suspensión (Suspending)
Las Aplicaciones Metro se ejecutan siempre a pantalla completa y Windows les cede todos los recursos que puedan necesitar. Sin embargo, en el momento en que el usuario cambia a otra aplicación, se produce el proceso de suspensión.
Durante este proceso Windows espera unos segundos como margen por si el usuario decide volver a la aplicación, evitando una suspensión innecesaria. Pasado ese tiempo se envía la señal correspondiente para que la aplicación ejecute el manejador para el evento Suspending, si se ha implementado.
Una vez invocado el manejador, la aplicación tendrá 5 segundos para guardar su estado, pues de lo contrario Windows la matará también. Las aplicaciones suspendidas pasan a memoria y pierden el acceso a otros recursos como CPU o disco. Sin embargo, en situaciones en que el sistema se encuentre escaso de memoria, Windows 8 se encargará de ir descargando las aplicaciones suspendidas de memoria.
Por esta razón es necesario que toda aplicación guarde su estado en este punto del ciclo de vida, puesto que no hay garantía de permanecer indefinidamente en memoria y, en caso de ser descargada, Windows no envía ninguna señal. En definitiva, el evento de suspensión es la última oportunidad que tiene la aplicación de guardar su estado.
Reactivación (Resuming)
Equivalente al evento de suspensión, pero para aplicaciones que ya están suspendidas. Permitirá a la aplicación “refrescarse” antes de mostrarse al usuario, en el momento en que vuelva a primer plano.
Este evento es muy importante si queremos cumplir uno de los principios de la Aplicaciones Metro: mostrarse frente al usuario como si siempre estuvieran vivas. Gestionando correctamente los eventos de suspensión y reactivación, el usuario va a tener la sensación de que la aplicación nunca ha dejado de ejecutarse.
Por último, es importante tener en cuenta que la suspensión puede haber durado minutos u horas, por lo que es importante recargar cualquier información o recurso que pueda haber quedado obsoleta, como por ejemplo el estado de la red.
Terminación
Este evento se produce bajo varias circunstancias, como por ejemplo si el sistema entra en un estado de carencia de recursos o si el usuario cierra la aplicación explícitamente. Como comentábamos antes, la aplicación no recibirá ninguna clase de señal o notificación para ejecutar acción alguna. Simplemente se la eliminará de la memoria.
En general las aplicaciones no pueden cerrarse a sí misma, salvo bajo circunstancias muy determinadas, como detección de fugas de memoria o problemas similares. Además, está prohibido que una aplicación ofrezca al usuario un mecanismo para cerrarse; impide su aprobación en Windows Store.
En Genbeta Dev | Programar aplicaciones Metro en Windows 8
Es especialista en metodologías ágiles y en estándares web relacionado con HTML5. Es miembro activo de la comunidad .NET a través de MADNUG y colabora con medios como DotNetMania, PC Actual o Desarrolloweb.com.
Puedes seguirle en Twitter: @javierholguera o en su blog: javierholguera.com