[Tips and Tricks] Detectar si una App Universal pasa a segundo plano

Send-To-BackIntroducción

Las aplicaciones universales corren bajo un ciclo de vida de modo que si el usuario cambia (switch) nuestra aplicación por otra, en un plazo de 10 segundos, el sistema pasará nuestra aplicación al estado de suspensión notificando a la misma vía el evento Suspending. Si el usuario cambia de nuevo a nuestra aplicación, el sistema “despierta” a la misma siendo notificada por el evento Resuming. Mientras la aplicación esta suspendida el sistema puede poner fin a la misma por necesidad de recursos. En este caso, la aplicación lanzará el evento Activated la próxima vez que el usuario la ejecute.

Ciclo de vida

Ciclo de vida

Estos eventos entre otros nos permiten controlar en la mayoría de situaciones a la perfección el ciclo de vida de las aplicaciones. Sin embargo, en ocasiones esto no es suficiente. A veces, necesitamos ser notificados de manera inmediata cuando nuestra aplicación pasa a segundo plano y no podemos confiar en el evento de suspensión ya que se lanzará 10 segundos despues de que otra aplicación pase a primer plano ocupando la pantalla. Por ejemplo, en el caso de un juego, se debe hacer una pausa inmediatamente tras pasar a segundo plano. En caso contrario sería fatal que pasasen aunque sean unos segundos sin control sobre el mismo!

¿Que podemos hacer?

Detectar el paso a segundo plano de manera inmediata

Para detectar el paso inmediato a segundo plano podemos utilizar el evento VisibilityChanged de la ventana de la aplicación. Para ello, en el evento OnLaunched del archivo App.xaml.cs tras asignar el Frame a utilizar como contenido de la ventana:

Window.Current.Content = rootFrame;

Nos suscribimos al evento VisibilityChanged de la ventana de la aplicación:

Window.Current.VisibilityChanged += Current_VisibilityChanged;

El evento anterior se lanzará tanto cuando la ventana de la aplicación pasa a segundo plano como cuando pasa a primer plano. Lo podremos detectar con facilidad gracias al argumento Windows.UI.Core.VisibilityChangedEventArgs:

void Current_VisibilityChanged(object sender, Windows.UI.Core.VisibilityChangedEventArgs e)<br />
{
     if (e.Visible)
  
          //  App en primer plano
     }
     else
     {
          //  App en segundo plano
     }
}

El argumento VisibilityChangedEventArgs cuenta con una propiedad booleana que nos indica si esta visible o no, de modo que podemos diferenciar facilmente si estamos en primer plano o en segundo plano.

Fácil, ¿verdad?. Puedes descargar un pequeño ejemplo con el código anterior a continuación:

Más información

Responder

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