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

Introducció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.

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)
{
     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

Deja un comentario

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