Usando a execução estendida em aplicativos para desktop do SDK do Aplicativo Windows

Sessões de execução estendidas permitem que seu aplicativo solicite que o sistema o mantenha em execução para cenários específicos, mesmo quando ele seria um candidato para redução de recursos em dispositivos movidos a bateria. Embora os aplicativos para desktop não sejam suspensos automaticamente, a execução estendida ainda é útil para sinalizar ao sistema a intenção.

Importante

Os aplicativos da área de trabalho continuam em execução, usem ou não a execução estendida. O principal benefício de ExtendedExecutionSession em um aplicativo para desktop é comunicar ao sistema que a atividade do aplicativo é importante e não deve ser interrompida por medidas de economia de energia, como a Espera Moderna ou o modo de economia de bateria.

Quando usar a execução estendida

As sessões de execução estendida são mais úteis em aplicativos da área de trabalho para:

  • Salvando dados críticos – garantindo que uma grande operação de salvamento seja concluída antes que o dispositivo entre em espera.
  • Rastreamento de localização — mantendo os dados de GPS ativos enquanto o aplicativo está minimizado em um notebook.
  • Processamentos de longa duração — Conclusão de uma tarefa de renderização, compilação ou análise de dados.

Para cenários em que seu aplicativo da área de trabalho simplesmente precisa continuar em execução (por exemplo, um aplicativo de chat ou player de música), você não precisa de execução estendida – o aplicativo continua em execução normalmente.

Criar uma sessão de execução estendida

Use a classe ExtendedExecutionSession :

using Windows.ApplicationModel.ExtendedExecution;

private ExtendedExecutionSession? _session;

private async Task StartExtendedSessionAsync()
{
    var session = new ExtendedExecutionSession
    {
        Reason = ExtendedExecutionReason.Unspecified,
        Description = "Completing critical data save"
    };

    session.Revoked += ExtendedSession_Revoked;

    ExtendedExecutionResult result = await session.RequestExtensionAsync();

    if (result == ExtendedExecutionResult.Allowed)
    {
        _session = session;
        // Proceed with the long-running work
    }
    else
    {
        session.Dispose();
        // The system denied the request — handle gracefully
    }
}

private void ExtendedSession_Revoked(object sender,
    ExtendedExecutionRevokedEventArgs args)
{
    // The session was revoked. Save state quickly.
    if (args.Reason == ExtendedExecutionRevokedReason.SystemPolicy)
    {
        // System needs resources — wrap up immediately
    }
}

Motivos de execução estendida

Reason Caso de uso
SavingData Seu aplicativo precisa concluir uma operação de salvamento
LocationTracking Seu aplicativo está acompanhando a localização do usuário
Unspecified Outras tarefas de longa duração

Note

LocationTracking requer o recurso location no manifesto do aplicativo e o consentimento do usuário.

Encerrar a sessão

Quando o trabalho terminar, descarte a sessão para liberar a solicitação:

private ExtendedExecutionSession? _session;

private void ExtendedSession_Revoked(object sender,
    ExtendedExecutionRevokedEventArgs args)
{
}

private void StopExtendedSession()
{
    if (_session != null)
    {
        _session.Revoked -= ExtendedSession_Revoked;
        _session.Dispose();
        _session = null;
    }
}

Diferenças da UWP

Behavior UWP Desktop
Purpose Impede a suspensão Sinaliza importância para o gerenciamento de energia
O aplicativo continua em execução sem ele Não — os aplicativos UWP são suspensos Sim – aplicativos da área de trabalho são executados normalmente
Revogação de sessão Pode causar suspensão Não interrompe o aplicativo, mas a economia de energia pode ser aplicada
SavingData Razão Impede a suspensão durante o salvamento Mesma API, menos crítica, já que o aplicativo não é suspenso

Práticas recomendadas

  • Solicite apenas a execução estendida quando você tiver um trabalho específico que não deve ser interrompido por economia de energia.
  • Sempre trate o evento Revoked, mesmo em aplicativos para desktop.
  • Encerre a sessão assim que o trabalho terminar.
  • Não mantenha uma sessão estendida indefinidamente — ela pode afetar a duração da bateria do dispositivo.