Use a execução estendida nas aplicações de ambiente de trabalho do SDK de Aplicações Windows

Sessões de execução prolongadas permitem que a sua aplicação peça que o sistema o mantenha a funcionar para cenários específicos, mesmo quando, de outra forma, seria candidato a redução de recursos em dispositivos alimentados por bateria. Embora as aplicações de ambiente de trabalho não sejam automaticamente suspensas, a execução prolongada continua a ser útil para sinalizar a intenção ao sistema.

Importante

As aplicações de ambiente de trabalho continuam a funcionar, quer usem ou não execução estendida. O principal benefício de ExtendedExecutionSession uma aplicação de ambiente de trabalho é comunicar ao sistema que o seu trabalho é importante e não deve ser interrompido por medidas de poupança de energia, como o Modern Standby ou a poupança de bateria.

Quando usar a execução estendida

As sessões de execução estendidas são mais úteis em aplicações de ambiente de trabalho para:

  • Guardar dados críticos — Garantir que uma grande operação de gravação é concluída antes de o dispositivo entrar em standby.
  • Rastreio de localização — Manter os dados GPS a circular enquanto a aplicação está minimizada num portátil.
  • Cálculos de longa duração — Completar uma tarefa de renderização, compilação ou análise de dados.

Para cenários em que a sua aplicação de ambiente de trabalho simplesmente precisa de continuar a funcionar (por exemplo, uma aplicação de chat ou leitor de música), não precisa de uma execução prolongada — a aplicação continua a correr normalmente.

Crie uma sessão de execução estendida

Utilize 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
    }
}

Razões de execução prolongada

Reason Caso de uso
SavingData A sua aplicação precisa de completar uma operação de gravação
LocationTracking A sua aplicação está a rastrear a localização do utilizador
Unspecified Outros trabalhos de longa duração

Note

LocationTracking requer a permissão location no manifesto da sua aplicação e o consentimento do utilizador.

Fim da sessão

Quando o trabalho estiver concluído, encerre a sessão para libertar o pedido:

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 em relação à UWP

Comportamento UWP Desktop
Purpose Previne a suspensão Sinaliza importância para a gestão de energia
A aplicação continua a correr sem ele Não — As aplicações UWP são suspensas Sim — as aplicações de ambiente de trabalho funcionam normalmente
Revogação da sessão Pode causar suspensão Não impede a aplicação, mas a poupança de energia pode aplicar-se
SavingData Razão Impede a suspensão durante a gravação Mesma API, menos crítica porque a app não suspende

Melhores práticas

  • Só pede execução prolongada quando tiveres trabalho específico que não deva ser interrompido por poupança de energia.
  • Processa sempre o evento Revoked, mesmo em aplicações de ambiente de trabalho.
  • Elimine a sessão assim que o trabalho estiver concluído.
  • Não mantenha uma sessão prolongada indefinidamente — isso pode afetar a duração da bateria do dispositivo.