Compartir vía


Controlar la suspensión de aplicaciones

API importantes

Aprende a guardar datos importantes de la aplicación cuando el sistema la suspende. En el ejemplo se registra un controlador de eventos para el evento Suspending y se guarda una cadena en un archivo.

Registro del controlador de eventos de suspensión

Regístrese para controlar el evento Suspending , que indica que la aplicación debe guardar sus datos de aplicación antes de que el sistema lo suspenda.

using System;
using Windows.ApplicationModel;
using Windows.ApplicationModel.Activation;
using Windows.UI.Xaml;

partial class MainPage
{
   public MainPage()
   {
      InitializeComponent();
      Application.Current.Suspending += new SuspendingEventHandler(App_Suspending);
   }
}
Public NotInheritable Class MainPage

   Public Sub New()
      InitializeComponent()
      AddHandler Application.Current.Suspending, AddressOf App_Suspending
   End Sub
   
End Class
MainPage::MainPage()
{
    InitializeComponent();
    Windows::UI::Xaml::Application::Current().Suspending({ this, &MainPage::App_Suspending });
}
using namespace Windows::ApplicationModel;
using namespace Windows::ApplicationModel::Activation;
using namespace Windows::Foundation;
using namespace Windows::UI::Xaml;
using namespace AppName;

MainPage::MainPage()
{
   InitializeComponent();
   Application::Current->Suspending +=
       ref new SuspendingEventHandler(this, &MainPage::App_Suspending);
}

Guardar los datos de la aplicación antes de la suspensión

Cuando la aplicación controla el evento Suspending , tiene la oportunidad de guardar sus datos de aplicación importantes en la función del controlador. La aplicación debe usar la API de almacenamiento LocalSettings para guardar datos de aplicación simples de forma sincrónica.

partial class MainPage
{
    async void App_Suspending(
        Object sender,
        Windows.ApplicationModel.SuspendingEventArgs e)
    {
        // TODO: This is the time to save app data in case the process is terminated.
    }
}
Public NonInheritable Class MainPage

    Private Sub App_Suspending(
        sender As Object,
        e As Windows.ApplicationModel.SuspendingEventArgs) Handles OnSuspendEvent.Suspending

        ' TODO: This is the time to save app data in case the process is terminated.
    End Sub

End Class
void MainPage::App_Suspending(
    Windows::Foundation::IInspectable const& /* sender */,
    Windows::ApplicationModel::SuspendingEventArgs const& /* e */)
{
    // TODO: This is the time to save app data in case the process is terminated.
}
void MainPage::App_Suspending(Object^ sender, SuspendingEventArgs^ e)
{
    // TODO: This is the time to save app data in case the process is terminated.
}

Liberar recursos

Debes liberar los recursos exclusivos y los identificadores de archivo para que otras aplicaciones puedan acceder a ellos mientras la aplicación está suspendida. Algunos ejemplos de recursos exclusivos son cámaras, dispositivos de E/S, dispositivos externos y recursos de red. Liberar explícitamente recursos exclusivos y identificadores de archivo ayuda a garantizar que otras aplicaciones puedan acceder a ellos mientras la aplicación está suspendida. Cuando se reanuda la aplicación, debe volver a adquirir sus recursos exclusivos y identificadores de archivo.

Comentarios

El sistema suspende la aplicación cada vez que el usuario cambia a otra aplicación o a la pantalla de escritorio o inicio. El sistema reanuda la aplicación cada vez que el usuario vuelve a ella. Cuando el sistema reanuda la aplicación, el contenido de las variables y las estructuras de datos es el mismo que antes de que el sistema suspendiera la aplicación. El sistema restaura la aplicación exactamente donde se dejó, de modo que parezca al usuario como si estuviera ejecutándose en segundo plano.

El sistema intenta mantener la aplicación y sus datos en la memoria mientras está suspendido. Sin embargo, si el sistema no tiene los recursos para mantener la aplicación en memoria, el sistema finalizará la aplicación. Cuando el usuario vuelve a una aplicación suspendida que se ha terminado, el sistema envía un evento Activated y debe restaurar sus datos de aplicación en su método OnLaunched.

El sistema no notifica a una aplicación cuando finaliza, por lo que la aplicación debe guardar sus datos de aplicación y liberar recursos exclusivos y identificadores de archivo cuando se suspenda y restaurarlos cuando la aplicación se active después de la finalización.

Si realiza una llamada asincrónica dentro del controlador, el control devuelve inmediatamente desde esa llamada asincrónica. Esto significa que la ejecución puede volver del controlador de eventos y la aplicación pasará al siguiente estado aunque la llamada asincrónica aún no se haya completado. Use el método GetDeferral en el objeto EnteredBackgroundEventArgs que se pasa al controlador de eventos para retrasar la suspensión hasta después de llamar al método Complete en el objeto Windows.Foundation.Deferral devuelto.

Un aplazamiento no aumenta la cantidad de tiempo que tienes que ejecutar el código antes de que finalice la aplicación. Solo retrasa la terminación hasta que se llama al método Complete del aplazamiento o la fecha límite pasa lo que ocurra primero. Para extender el tiempo en el estado De suspensión, use ExtendedExecutionSession

Nota:

Para mejorar la capacidad de respuesta del sistema en Windows 8.1, las aplicaciones reciben acceso de prioridad baja a los recursos después de que se suspendan. Para admitir esta nueva prioridad, se amplía el tiempo de espera de la operación de suspensión para que la aplicación tenga el equivalente del tiempo de espera de 5 segundos para la prioridad normal en Windows o entre 1 y 10 segundos en Windows Phone. No se puede extender ni modificar esta ventana de tiempo de espera.

Nota sobre la depuración mediante Visual Studio: Visual Studio impide que Windows suspenda una aplicación que esté asociada al depurador. Esto es para permitir que el usuario vea la interfaz de usuario de depuración de Visual Studio mientras se ejecuta la aplicación. Al depurar una aplicación, puede enviarlo a un evento de suspensión mediante Visual Studio. Asegúrese de que se muestra la barra de herramientas Ubicación de depuración y, a continuación, haga clic en el icono Suspender .