Tratar a suspensão do aplicativo

APIs importantes

Saiba como salvar dados de aplicativo importantes quando o sistema suspende o seu aplicativo. O exemplo registra um manipulador de eventos para o evento Suspending e salva uma cadeia de caracteres em um arquivo.

Registrar o manipulador de eventos de suspensão

Registre-se para manipular o evento Suspending , que indica que seu aplicativo deve salvar os dados do aplicativo antes que o sistema o 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);
}

Salvar dados do aplicativo antes da suspensão

Quando seu aplicativo manipula o evento Suspending , ele tem a oportunidade de salvar seus dados importantes do aplicativo na função de manipulador. O aplicativo deve usar a API de armazenamento LocalSettings para salvar dados simples do aplicativo de forma síncrona.

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

Você deve liberar recursos exclusivos e identificadores de arquivo para que outros aplicativos possam acessá-los enquanto seu aplicativo estiver suspenso. Exemplos de recursos exclusivos incluem câmeras, dispositivos de E/S, dispositivos externos e recursos de rede. A liberação explícita de recursos exclusivos e identificadores de arquivo ajuda a garantir que outros aplicativos possam acessá-los enquanto seu aplicativo estiver suspenso. Quando o aplicativo for retomado, ele deverá readquirir seus recursos exclusivos e identificadores de arquivo.

Comentários

O sistema suspende seu aplicativo sempre que o usuário alterna para outro aplicativo ou para a área de trabalho ou tela inicial. O sistema retoma o seu aplicativo sempre que o usuário alterna de volta para ele. Quando o sistema retoma o aplicativo, o conteúdo das variáveis e estruturas de dados é o mesmo de antes da suspensão do aplicativo pelo sistema. O sistema restaura o aplicativo exatamente como ele havia parado, de maneira que o usuário tem impressão de que ele estava sendo executado em tela de fundo.

O sistema tenta manter seu aplicativo e seus dados na memória enquanto ele está suspenso. No entanto, se o sistema não tiver os recursos para manter seu aplicativo na memória, o sistema encerrará seu aplicativo. Quando o usuário volta para um aplicativo suspenso que foi encerrado, o sistema envia um evento Activated e deve restaurar os dados do aplicativo em seu método OnLaunched.

O sistema não notifica um aplicativo quando ele é encerrado, portanto, seu aplicativo deve salvar os dados do aplicativo e liberar recursos exclusivos e identificadores de arquivo quando ele é suspenso e restaurá-los quando o aplicativo é ativado após o encerramento.

Se você fizer uma chamada assíncrona dentro do manipulador, o controle retornará imediatamente dessa chamada assíncrona. Isso significa que a execução pode retornar do manipulador de eventos e seu aplicativo passará para o próximo estado, mesmo que a chamada assíncrona ainda não tenha sido concluída. Use o método GetDeferral no objeto EnteredBackgroundEventArgs que é passado para o manipulador de eventos para atrasar a suspensão até depois de chamar o método Complete no objeto Windows.Foundation.Deferral retornado.

Um adiamento não aumenta a quantidade de tempo que você tem para executar seu código antes que seu aplicativo seja encerrado. Ele apenas atrasa a rescisão até que o método Complete do adiamento seja chamado ou o prazo passe - o que ocorrer primeiro. Para estender o tempo no estado Suspending, use ExtendedExecutionSession

Observação

Para melhorar a capacidade de resposta do sistema no Windows 8.1, os aplicativos recebem acesso de baixa prioridade aos recursos depois que são suspensos. Para dar suporte a essa nova prioridade, o tempo limite da operação de suspensão é estendido para que o aplicativo tenha o equivalente ao tempo limite de 5 segundos para prioridade normal no Windows ou entre 1 e 10 segundos no Windows Phone. Não é possível estender ou alterar essa janela de tempo limite.

Uma observação sobre a depuração usando o Visual Studio: o Visual Studio impede que o Windows suspenda um aplicativo anexado ao depurador. Isso é para permitir que o usuário exiba a interface do usuário de depuração do Visual Studio enquanto o aplicativo está em execução. Ao depurar um aplicativo, você pode enviar a ele um evento de suspensão usando o Visual Studio. Verifique se a barra de ferramentas Local de Depuração está sendo mostrada e clique no ícone Suspender .