Compartilhar via


Executar em segundo plano indefinidamente

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

No entanto, os desenvolvedores que criam aplicativos UWP para uso pessoal (ou seja, aplicativos carregados fora da Microsoft Store) ou desenvolvedores que desenvolvem aplicativos UWP empresariais podem querer usar todos os recursos disponíveis no dispositivo, sem qualquer limitação de execução em segundo plano ou prolongada. Aplicativos UWP de uso empresarial e pessoal podem usar APIs no Windows Creators Update (versão 1703) para desativar a limitação. Lembre-se de que você não poderá colocar um aplicativo na Microsoft Store se ele usar essas APIs.

Executar enquanto minimizado

Os aplicativos UWP se movem para um estado suspenso quando não estão em execução em primeiro plano. Na área de trabalho, 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 que são aceitas pela Microsoft Store são detalhadas em adiar a suspensão do 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 ExtendedExecutionForegroundSession com a extendedExecutionUnconstrained funcionalidade restrita para que seu aplicativo possa continuar a ser executado enquanto minimizado, independentemente do estado de energia do dispositivo.  

A extendedExecutionUnconstrained funcionalidade é adicionada como uma funcionalidade restrita no manifesto do aplicativo. Consulte as 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 capacidade.

Para mais informações, consulte a seção 'Capacidades Restritas' nas declarações de capacidade 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 capacidade extendedExecutionUnconstrained, 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 chegar ao primeiro plano. Sessões de execução estendida não restritas não são limitadas por cotas de energia ou pela economia de bateria do sistema operacional. Desde que exista uma referência ao objeto de sessão, o aplicativo permanecerá no estado em execução e não entrará no estado suspenso. Se o aplicativo for fechado pelo usuário, a sessão será revogada.

O registro para o 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 25 segundos antes de serem canceladas. Algumas das tarefas de maior duração também têm uma verificação para garantir que a tarefa em segundo plano não esteja ociosa nem consumindo memória. No Windows Creators Update (versão 1703), a funcionalidade restrita extendedBackgroundTaskTime foi introduzida para remover esses limites. A capacidade extendedBackgroundTaskTime é adicionada como uma capacidade 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 capacidade.

Para mais informações, consulte a seção 'Capacidades Restritas' nas declarações de capacidade 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>

Essa funcionalidade remove as limitações de tempo de execução de processos e o monitor de tarefas inativas. Depois que uma tarefa em segundo plano é iniciada, seja por um gatilho ou por uma chamada de serviço de aplicativo, ao obter adiamento no BackgroundTaskInstance fornecido pelo método Executar, 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 o Economia de Bateria estiver ativo. Isso pode ser alterado com as configurações do sistema operacional. Mais informações estão disponíveis em Otimização da 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, aplicativos pessoais e aplicativos de linha de negócios podem usar a execução estendida e a capacidade extendedBackgroundTaskTime para criar aplicativos que serão executados o tempo necessário, independentemente da disponibilidade de recursos do dispositivo.

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

Consulte também

Remover restrições de recurso de tarefa em segundo plano