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 .
Tópicos relacionados
- Ciclo de vida do aplicativo
- Tratar a ativação do aplicativo
- Tratar a retomada do app
- Diretrizes de UX para inicialização, suspensão e retomada
- Execução estendida