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 o aplicativo deve salvar seus dados antes de ser suspenso pelo sistema.
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 os dados do aplicativo antes da suspensão
Quando manipula o evento Suspending, o aplicativo tem uma oportunidade de salvar seus dados importantes na função do manipulador. O aplicativo deve usar a API de armazenamento LocalSettings para salvar dados simples do aplicativo de maneira 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 e identificadores de arquivo exclusivos para que outros aplicativos tenham acesso a eles enquanto seu aplicativo estiver suspenso. Exemplos de recursos exclusivos incluem câmeras, dispositivos de E/S, dispositivos externos e recursos de rede. Liberar explicitamente os indicadores de arquivos e os recursos exclusivos ajuda a garantir que outros aplicativos possam acessá-los enquanto seu aplicativo estiver suspenso. Quando o aplicativo é retomado, ele deve requisitar seus recursos exclusivos e identificadores de arquivo.
Comentários
O sistema suspende o aplicativo sempre que o usuário alternar para outro aplicativo, para a área de trabalho ou para a 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 o aplicativo e seus dados na memória enquanto ele está suspenso. Entretanto, caso não tenha recursos suficientes para manter o aplicativo na memória, o sistema encerra o aplicativo. Quando o usuário alterna de 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 está encerrado, por isso seu aplicativo deve salvar seus dados de aplicativo e liberar identificadores de arquivo e recursos exclusivos quando suspenso e restaurá-los quando ativado após o encerramento.
Se você fizer uma chamada assíncrona no manipulador, o controle será retornado imediatamente daquela chamada assíncrona. Isso significa que a execução pode retornar do manipulador de eventos e o aplicativo mudará 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 que você chamar o método Complete no objeto Windows.Foundation.Deferral retornado.
Um adiamento não aumenta o tempo necessário para executar seu código antes que seu aplicativo seja encerrado. Ele somente atrasa o encerramento até que o método Complete do adiamento seja chamado ou o prazo termine, o que ocorrer primeiro. Para estender o tempo em que o estado Suspending usa ExtendedExecutionSession
Observação
Para melhorar a capacidade de resposta do sistema em Windows 8.1, os aplicativos recebem acesso de baixa prioridade aos recursos após serem 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 do tempo limite de 5 segundos para prioridade normal no Windows ou entre 1 e 10 segundos no Windows Phone. Você não pode estender ou alterar esse período 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 ocorre para permitir que o usuário exiba a interface de usuário de depuração do Visual Studio enquanto o aplicativo está em execução. Quando você está depurando um aplicativo, é possível 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 da experiência do usuário para execução, suspensão e reinício
- Execução estendida
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de