Executar em segundo plano indefinidamente

Para fornecer a melhor experiência para os usuários, o Windows impõe limites de recursos em aplicativos UWP (Plataforma Universal do Windows). Os aplicativos em primeiro plano recebem mais memória e tempo de execução; aplicativos em segundo plano recebem menos. Os usuários são, portanto, protegidos contra o baixo desempenho do aplicativo em primeiro plano e o consumo intenso de bateria.

No entanto, os desenvolvedores que escrevem aplicativos UWP para uso pessoal (ou seja, aplicativos de sideload que não serão publicados na Microsoft Store) ou desenvolvedores que escrevem aplicativos UWP corporativos podem querer usar todos os recursos disponíveis no dispositivo sem qualquer limitação de execução estendida ou em segundo plano. Os aplicativos UWP pessoais e de linha de negócios podem usar APIs no Windows Creators Update (versão 1703) para desativar a limitação. Lembre-se de que você não pode colocar um aplicativo na Microsoft Store se ele usar essas APIs.

Executar enquanto minimizado

Os aplicativos UWP são movidos para um estado suspenso quando não estão sendo executados em primeiro plano. No desktop, isso ocorre quando um usuário minimiza o aplicativo. Os aplicativos usam uma sessão de execução estendida para continuar em execução enquanto minimizados. As APIs de execução estendida aceitas pela Microsoft Store são detalhadas em Adiar suspensão de aplicativo com execução estendida.

Se você estiver desenvolvendo um aplicativo que não se destina a ser enviado para a Microsoft Store, poderá usar o ExtendedExecutionForegroundSession com a extendedExecutionUnconstrained funcionalidade restrita para que seu aplicativo possa continuar a ser executado enquanto estiver minimizado, independentemente do estado de energia do dispositivo.  

A extendedExecutionUnconstrained funcionalidade é adicionada como uma funcionalidade restrita no manifesto do aplicativo. Consulte Declarações de funcionalidade do aplicativo para obter mais informações sobre recursos restritos .

Observação

Adicione a declaração de namespace XML xmlns:rescap e use o prefixo rescap para declarar a funcionalidade.

Para obter mais informações, consulte a seção Recursos Restritos de Declarações de funcionalidade do aplicativo.

Package.appxmanifest

<Package
    ...
    xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
    IgnorableNamespaces="uap mp rescap">
  ...
  <Capabilities>
    <rescap:Capability Name="extendedExecutionUnconstrained"/>
  </Capabilities>
</Package>

Quando você usa a extendedExecutionUnconstrained funcionalidade, ExtendedExecutionForegroundSession e ExtendedExecutionForegroundReason são usados em vez de ExtendedExecutionSession e ExtendedExecutionReason. O mesmo padrão para criar a sessão, definir membros e solicitar a extensão de forma assíncrona ainda se aplica:

var newSession = new ExtendedExecutionForegroundSession();
newSession.Reason = ExtendedExecutionForegroundReason.Unconstrained;
newSession.Description = "Long Running Processing";
newSession.Revoked += SessionRevoked;
ExtendedExecutionForegroundResult result = await newSession.RequestExtensionAsync();
switch (result)
{
    case ExtendedExecutionForegroundResult.Allowed:
        DoLongRunningWork();
        break;

    default:
    case ExtendedExecutionForegroundResult.Denied:
        DoShortRunningWork();
        break;
}

Você pode solicitar essa sessão de execução estendida assim que o aplicativo ficar em primeiro plano. As sessões de execução estendidas irrestritas não são limitadas por cotas de energia ou pela economia de bateria do sistema operacional. Enquanto existir uma referência ao objeto de sessão, o aplicativo permanecerá no estado de execução e não entrará no estado suspenso. Se o aplicativo for fechado pelo usuário, a sessão será revogada.

O registro no evento Revoked permitirá que seu aplicativo faça qualquer trabalho de limpeza necessário. No estado de suspensão, você pode criar uma sessão de execução estendida com ExtendedExecutionReason.SavingData para salvar dados do usuário antes que o aplicativo seja encerrado e removido da memória.

Executar tarefas em segundo plano indefinidamente

Na Plataforma Universal do Windows, as tarefas em segundo plano são processos executados em segundo plano sem qualquer forma de interface do usuário. As tarefas em segundo plano geralmente podem ser executadas por no máximo vinte e cinco segundos antes de serem canceladas. Algumas das tarefas de execução mais longa também têm uma verificação para garantir que a tarefa em segundo plano não esteja ociosa ou usando memória. No Windows Creators Update (versão 1703), a funcionalidade restrita extendedBackgroundTaskTime foi introduzida para remover esses limites. A funcionalidade extendedBackgroundTaskTime é adicionada como uma funcionalidade restrita no arquivo de manifesto do aplicativo:

Observação

Adicione a declaração de namespace XML xmlns:rescap e use o prefixo rescap para declarar a funcionalidade.

Para obter mais informações, consulte a seção Recursos Restritos de Declarações de funcionalidade do aplicativo.

Package.appxmanifest

<Package
    ... 
    xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
    IgnorableNamespaces="uap mp rescap">
...
  <Capabilities>
    <rescap:Capability Name="extendedBackgroundTaskTime"/>
  </Capabilities>
</Package>

Esse recurso remove as limitações de tempo de execução e o watchdog de tarefas ociosas. Depois que uma tarefa em segundo plano é iniciada, seja por um gatilho ou uma chamada de serviço de aplicativo, depois que ela recebe um adiamento no BackgroundTaskInstance fornecido pelo método Run, ela pode ser executada indefinidamente. Se o aplicativo estiver definido como Gerenciado pelo Windows, ele ainda poderá ter uma cota de energia aplicada a ele e suas tarefas em segundo plano não serão ativadas quando a Economia de bateria estiver ativa. Isso pode ser alterado com as configurações do sistema operacional. Mais informações estão disponíveis em Otimizando a atividade em segundo plano.

A Plataforma Universal do Windows monitora a execução de tarefas em segundo plano para garantir uma boa duração da bateria e uma experiência de aplicativo em primeiro plano suave. No entanto, os aplicativos pessoais e os aplicativos de linha de negócios Enterprise podem usar a execução estendida e o recurso extendedBackgroundTaskTime para criar aplicativos que serão executados pelo tempo necessário, independentemente da disponibilidade de recursos do dispositivo.

Lembre-se de que os recursos extendedExecutionUnconstrained e extendedBackgroundTaskTime podem substituir a política padrão para aplicativos UWP e podem causar um consumo significativo de bateria. Antes de usar esses recursos, primeiro confirme se as políticas padrão de execução estendida e tempo de tarefa em segundo plano não atendem às suas necessidades e execute testes em condições de restrição de bateria para entender o impacto que seu aplicativo terá em um dispositivo.

Confira também

Remover restrições de recursos de tarefas em segundo plano