Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
Os metadados do dispositivo foram preteridos e serão removidos numa versão futura do Windows. Para obter informações sobre a substituição dessa funcionalidade, consulte Metadados de Contêiner do Pacote de Driver.
Seu aplicativo UWP pode usar uma tarefa em segundo plano do dispositivo para sincronizar dados em seu dispositivo periférico. Se o aplicativo estiver associado aos metadados do dispositivo, esse aplicativo de dispositivo UWP também poderá usar um agente em segundo plano do dispositivo para executar atualizações de dispositivo, como atualizações de firmware. Os agentes em segundo plano do dispositivo estão sujeitos a políticas que garantem o consentimento do usuário e ajudam a preservar a vida útil da bateria enquanto os dispositivos estão sendo sincronizados e atualizados.
Para executar operações de atualização e sincronização de dispositivos, crie uma tarefa em segundo plano do dispositivo que usa o DeviceUseTrigger e o DeviceServicingTrigger, respectivamente. Para saber como criar uma tarefa em segundo plano do dispositivo com o exemplo de dispositivo USB personalizado, consulte Criando uma tarefa em segundo plano do dispositivo.
As APIs de dispositivo do Windows Runtime não exigem metadados do dispositivo. Isso significa que seu aplicativo não precisa ser um aplicativo de dispositivo UWP para usá-los. Os aplicativos UWP podem usar essas APIs para acessar USB, HID (Dispositivos de Interface Humana), dispositivos Bluetooth e muito mais. Para obter mais informações, consulte Integração de dispositivos.
Visão geral da tarefa em segundo plano do dispositivo
Quando os usuários movem seu aplicativo UWP para fora da tela, o Windows suspende seu aplicativo na memória, permitindo que outro aplicativo tenha o primeiro plano. Quando um aplicativo é suspenso, ele é residente na memória, mas o Windows o impediu de ser executado.
Todas as operações de dispositivo em andamento, como sincronização e atualização, são interrompidas sem a ajuda de uma tarefa em segundo plano do dispositivo. O Windows fornece dois gatilhos de tarefa em segundo plano para resolver esse problema: DeviceUseTrigger e DeviceServicingTrigger. Esses gatilhos permitem que seu aplicativo execute operações de sincronização e atualização longas em seu dispositivo periférico com segurança em segundo plano, mesmo que seu aplicativo seja suspenso. Para obter mais informações sobre a suspensão do aplicativo, consulte Inicialização, retomada e multitarefa.
| Gatilho de tarefas em segundo plano | Requer metadados do dispositivo | Descrição |
|---|---|---|
| DeviceUseTrigger | Não | Habilita operações de sincronização de execução prolongada de ou para seu dispositivo periférico enquanto seu aplicativo está suspenso. A sincronização do dispositivo em segundo plano requer que o usuário aprove a sincronização em segundo plano pelo seu aplicativo. Seu dispositivo também deve estar conectado ou emparelhado com o computador, com E/S ativa e um máximo de 10 minutos de atividade em segundo plano permitida. Mais detalhes sobre a imposição de políticas são descritos posteriormente neste artigo. |
| DeviceServicingTrigger | Sim | Habilita atualizações de dispositivo de execução prolongada, por exemplo, transferências de configurações ou atualizações de firmware, enquanto seu aplicativo está suspenso. Atualizar seu dispositivo em segundo plano requer aprovação do usuário sempre que a tarefa em segundo plano é usada. Ao contrário da tarefa em segundo plano deviceUseTrigger, a tarefa deviceServicingTrigger em segundo plano permite a reinicialização e desconexão do dispositivo e permite um máximo de 30 minutos de atividade em segundo plano. Mais detalhes sobre a imposição de políticas são descritos posteriormente neste artigo. |
DeviceServicingTrigger requer metadados de dispositivo porque o aplicativo deve ser especificado como um aplicativo privilegiado para executar operações de atualização do dispositivo.
Privilégio de aplicativo
Um aplicativo privilegiado pode executar algumas operações críticas do dispositivo, como atualizações de dispositivo de execução prolongada. Um aplicativo privilegiado é o aplicativo que o fabricante do dispositivo autoriza a executar essas operações. Os metadados do dispositivo especificam qual aplicativo, se houver, é designado como o aplicativo privilegiado para um dispositivo.
Ao criar os metadados do dispositivo com o assistente de metadados do dispositivo, especifique seu aplicativo na página Especificar informações do aplicativo de dispositivo UWP . Para obter mais informações, consulte a Etapa 2: Criar metadados de dispositivo para seu aplicativo de dispositivo UWP.
Protocolos com suporte
As tarefas em segundo plano do dispositivo que usam DeviceUseTrigger e DeviceServicingTrigger permitem que seu aplicativo se comunique com dispositivos periféricos por protocolos específicos. As tarefas disparadas pelo sistema normalmente usadas por aplicativos UWP não dão suporte a esses protocolos.
| Protocolo | DeviceServicingTrigger | DeviceUseTrigger | Gatilhos do sistema |
|---|---|---|---|
| USB |
|
|
|
| HID |
|
|
|
| Bluetooth RFCOMM |
|
|
|
| Bluetooth GATT |
|
|
|
| MTP |
|
|
|
| Rede com fio |
|
|
|
| Rede Wi-Fi |
|
|
|
| IDeviceIOControl |
|
|
|
Registrando tarefas em segundo plano no manifesto do pacote de aplicativo
Seu aplicativo executa operações de sincronização e atualização no código executado como parte de uma tarefa em segundo plano. Esse código é inserido em uma classe do Windows Runtime que implementa iBackgroundTask (ou em uma página JavaScript dedicada para aplicativos JavaScript). Para usar uma tarefa em segundo plano do dispositivo, seu aplicativo deve declará-la no arquivo de manifesto do aplicativo de um aplicativo em primeiro plano, como faz para tarefas em segundo plano disparadas pelo sistema.
Neste exemplo de um arquivo de manifesto de pacote de aplicativo, DeviceLibrary.SyncContent e DeviceLibrary.UpdateFirmware são pontos de entrada do aplicativo em primeiro plano. DeviceLibrary.SyncContent é o ponto de entrada para a tarefa em segundo plano que usa o DeviceUseTrigger. DeviceLibrary.UpdateFirmware é o ponto de entrada para a tarefa em segundo plano que usa o DeviceServicingTrigger.
<Extensions>
<Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
<BackgroundTasks>
<m2:Task Type="deviceUse" />
</BackgroundTasks>
</Extension>
<Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.UpdateFirmware">
<BackgroundTasks>
<m2:Task Type="deviceServicing" />
</BackgroundTasks>
</Extension>
</Extensions>
Usando seu dispositivo com tarefas em segundo plano
Para desenvolver seu aplicativo para aproveitar as tarefas em segundo plano deviceUseTrigger e DeviceServicingTrigger, siga este conjunto básico de etapas. Para obter mais informações sobre tarefas em segundo plano, consulte Suporte ao aplicativo com tarefas em segundo plano.
Seu aplicativo registra sua tarefa em segundo plano no manifesto do aplicativo e inscreve o código da tarefa em segundo plano em uma classe do Windows Runtime que implementa iBackgroundTask ou em uma página JavaScript dedicada para aplicativos JavaScript.
Quando o aplicativo for iniciado, ele criará e configurará um objeto de gatilho de dispositivo do tipo apropriado, DeviceUseTrigger ou DeviceServicingTrigger, e armazenará a instância de gatilho para uso futuro.
Seu aplicativo verifica se a tarefa em segundo plano foi registrada anteriormente e, caso contrário, a registra no gatilho do dispositivo. Seu aplicativo não tem permissão para definir condições na tarefa associada a esse gatilho.
Quando seu aplicativo precisa disparar a tarefa em segundo plano, ele chama o método de ativação RequestAsync no objeto de gatilho do dispositivo.
Sua tarefa em segundo plano não é limitada como outras tarefas em segundo plano do sistema (não há cota de tempo de CPU), mas é executada com prioridade reduzida para manter os aplicativos em primeiro plano responsivos.
Com base no tipo de gatilho, o Windows valida que as políticas necessárias são atendidas, incluindo a solicitação de consentimento do usuário para a operação antes de iniciar a tarefa em segundo plano.
O Windows monitora as condições do sistema e o runtime da tarefa e, se necessário, cancela a tarefa se as condições necessárias não forem mais atendidas.
Quando as tarefas em segundo plano relatam progresso ou conclusão, seu aplicativo recebe esses eventos por meio de eventos de progresso e concluídos na tarefa registrada.
Pontos importantes a serem considerados ao usar as tarefas em segundo plano do dispositivo
A capacidade de disparar programaticamente tarefas em segundo plano que usam o DeviceUseTrigger e DeviceServicingTrigger é limitada apenas a tarefas em segundo plano do dispositivo.
O Windows impõe determinadas políticas para garantir o consentimento do usuário ao atualizar seus dispositivos periféricos. Mais políticas são impostas para preservar a duração da bateria do usuário ao sincronizar e atualizar dispositivos periféricos.
O Windows pode cancelar tarefas em segundo plano que usam DeviceUseTrigger e DeviceServicingTrigger quando determinados requisitos de política não são mais atendidos, incluindo uma quantidade máxima de tempo em segundo plano (tempo de relógio de parede). É importante considerar esses requisitos de política ao usar essas tarefas em segundo plano para interagir com seu dispositivo periférico.
Dica
Para ver como essas tarefas em segundo plano funcionam, baixe um exemplo. O exemplo de dispositivo USB personalizado demonstra uma tarefa em segundo plano que executa a sincronização do dispositivo com DeviceUseTrigger.
Consentimento do usuário
Quando seu aplicativo usa DeviceUseTrigger ou DeviceServicingTrigger, o Windows impõe políticas para garantir que o usuário dê ao seu aplicativo permissão para acessar seu dispositivo em segundo plano para sincronizar e atualizar conteúdo. As políticas também são impostas para ajudar a preservar a vida útil da bateria do usuário ao sincronizar e atualizar dispositivos periféricos.
Consentimento do usuário de sincronização de dispositivo
Uma tarefa em segundo plano que usa DeviceUseTrigger requer um consentimento de usuário único permitindo que seu aplicativo sincronize em segundo plano. Esse consentimento é armazenado por aplicativo e por modelo de dispositivo. O usuário consente em permitir que o aplicativo acesse o dispositivo em segundo plano, assim como ele consente em permitir que o aplicativo acesse o dispositivo quando o aplicativo estiver em primeiro plano.
No exemplo a seguir, um aplicativo chamado Tailspin Toys está recebendo permissão do usuário para sincronizar em segundo plano.
Se os usuários mudarem de ideia mais tarde, eles poderão revogar permissões em Configurações.
Consentimento do usuário de atualização do dispositivo
Ao contrário das tarefas em segundo plano que usam DeviceUseTrigger, aquelas que usam a tarefa em segundo plano DeviceServicingTrigger exigem o consentimento do usuário sempre que a tarefa em segundo plano é disparada. Esse consentimento não é armazenado como é para DeviceUseTrigger. Isso ocorre porque as atualizações de firmware de dispositivo envolvem operações de maior risco e precisam de mais tempo para serem concluídas.
O Windows também fornece aos usuários informações sobre atualizações de dispositivo. Isso inclui avisos para manter o dispositivo conectado durante toda a atualização e garantir que o computador esteja carregado. O Windows também mostra o tempo de execução aproximado da operação se o aplicativo a fornecer.
Restrições de frequência e primeiro plano
Não há nenhuma restrição na frequência com que seu aplicativo pode iniciar operações, mas seu aplicativo pode executar apenas uma operação de tarefa em segundo plano DeviceUseTrigger ou DeviceServicingTrigger por vez (isso não afeta outros tipos de tarefas em segundo plano) e pode iniciar uma tarefa em segundo plano somente enquanto seu aplicativo estiver em primeiro plano. Quando o aplicativo não está em primeiro plano, não é possível iniciar uma tarefa em segundo plano com DeviceUseTrigger ou DeviceServicingTrigger. Seu aplicativo não pode iniciar uma segunda tarefa em segundo plano do dispositivo antes da conclusão da primeira tarefa em segundo plano.
Políticas de tarefa em segundo plano do dispositivo
O Windows impõe políticas quando seu aplicativo usa uma tarefa em segundo plano do dispositivo. Se essas políticas não forem atendidas, a tarefa em segundo plano usando DeviceUseTrigger ou DeviceServicingTrigger poderá ser cancelada. É importante considerar esses requisitos de política ao usar tarefas em segundo plano do dispositivo para interagir com seu dispositivo periférico.
Políticas de iniciação de tarefa
Esta tabela indica quais políticas de iniciação de tarefa se aplicam a cada gatilho de tarefa em segundo plano.
| Policy | DeviceServicingTrigger | DeviceUseTrigger |
|---|---|---|
| Seu aplicativo UWP está em primeiro plano ao acionar a tarefa de plano de fundo. |
|
A política |
| Seu dispositivo está conectado ao sistema (ou dentro do alcance de um dispositivo sem fio). |
|
A política |
| Sua tarefa em segundo plano consome 400 ms de tempo de CPU (supondo uma CPU de 1GHz) a cada minuto quando a tela está bloqueada ou a cada 5 minutos quando a tela não está bloqueada. A falha ao atender a essa política pode resultar no cancelamento de sua tarefa. |
|
A política |
| Seu dispositivo é acessível ao aplicativo usando as APIs periféricas do dispositivo (as APIs do Windows Runtime para USB, HID, Bluetooth e assim por diante). Se o aplicativo não puder acessar o dispositivo, o acesso às tarefas em segundo plano será negado. |
|
A política |
| O ponto de entrada da tarefa em segundo plano fornecido pelo aplicativo é registrado no manifesto do pacote do aplicativo. |
|
A política |
| O usuário deu permissão para a tarefa continuar. | Todas as vezes. | Primeira vez, depois controlada por permissões do aplicativo. |
| A estimativa de tempo fornecida pelo aplicativo é inferior a 30 minutos. |
|
|
| O aplicativo é especificado como o aplicativo privilegiado para o dispositivo. Deve haver uma correspondência completa de ID do aplicativo contra a lista de aplicativos privilegiados nos metadados do dispositivo contêiner. |
|
|
| O computador tem mais de 33% de capacidade da bateria restante ou está com alimentação CA. |
|
|
| Apenas uma tarefa em segundo plano do dispositivo está em execução por tipo de operação. |
|
A política |
Verificações de política de tempo de execução
O Windows impõe os seguintes requisitos de política de runtime enquanto sua tarefa está em execução em segundo plano. Se qualquer um dos requisitos de runtime parar de ser verdadeiro, o Windows cancelará a tarefa em segundo plano do dispositivo.
Esta tabela indica quais políticas de runtime se aplicam a cada gatilho de tarefa em segundo plano.
| Verificação de política | DeviceServicingTrigger | DeviceUseTrigger |
|---|---|---|
| Limite de tempo do relógio de parede – a quantidade total de tempo que a tarefa do aplicativo pode ser executada em segundo plano. | 30 minutos | 10 minutos |
| Seu dispositivo está conectado ao sistema (ou dentro do alcance de um dispositivo sem fio). |
|
|
| A tarefa é executar E/S regulares para o dispositivo (1 E/S a cada 5 segundos). |
|
|
| O aplicativo não cancelou a tarefa. |
|
|
| O aplicativo não foi encerrado. |
|
|
Práticas recomendadas
Veja a seguir as práticas recomendadas para aplicativos de dispositivo UWP que usam as tarefas em segundo plano do dispositivo.
Modelo de programação de tarefas em segundo plano do dispositivo
O uso das tarefas em segundo plano deviceUseTrigger ou DeviceServicingTrigger de seu aplicativo garante que todas as operações de sincronização ou atualização de dispositivo iniciadas em seu aplicativo em primeiro plano continuem sendo executadas em segundo plano se os usuários mudarem de aplicativo e seu aplicativo em primeiro plano for suspenso pelo Windows. Recomendamos que você siga este modelo geral para registrar, disparar e cancelar o registro de suas tarefas em segundo plano:
Registre a tarefa em segundo plano antes de solicitar o gatilho.
Conecte manipuladores de eventos de progresso e conclusão ao seu gatilho. Quando seu aplicativo volta do estado de suspensão, o Windows fornece ao seu aplicativo quaisquer eventos de progresso ou conclusão enfileirados que possam ser usados para determinar o status de suas tarefas em segundo plano.
Feche todos os objetos de dispositivo abertos ao acionar suas tarefas em segundo plano DeviceUseTrigger ou DeviceServicingTrigger para que esses dispositivos estejam livres para serem abertos e usados pela tarefa em segundo plano.
Registre o gatilho.
Quando uma tarefa for concluída, cancele o registro da tarefa em segundo plano. Quando sua tarefa em segundo plano for concluída, você poderá cancelar o registro das tarefas em segundo plano e reabrir o dispositivo e usá-lo regularmente do aplicativo UWP.
Registre-se para eventos de cancelamento de sua classe de tarefa em segundo plano. O registro para eventos de cancelamento permite que o código da tarefa em segundo plano interrompa a execução da tarefa em segundo plano quando cancelada pelo Windows ou pelo aplicativo em primeiro plano.
Na saída do aplicativo (não suspensão), cancele o registro e cancele as tarefas em execução.
Quando seu aplicativo for encerrado, cancele o registro e cancele as tarefas em execução.
Quando seu aplicativo é encerrado, suas tarefas em segundo plano são canceladas e todos os manipuladores de eventos existentes são desconectados de suas tarefas em segundo plano existentes. Isso impede que você determine o estado de suas tarefas em segundo plano. Desregistrar e cancelar a tarefa em segundo plano permitirá que o código de cancelamento interrompa sua tarefa em segundo plano de forma limpa.
Dica
Para obter uma descrição detalhada de como isso é feito com o exemplo de dispositivo USB personalizado, consulte Criando uma tarefa em segundo plano do dispositivo.
Cancelando uma tarefa em segundo plano
Para cancelar uma tarefa em execução em segundo plano do seu aplicativo em primeiro plano, use o método Unregister no objeto BackgroundTaskRegistration que você usa em seu aplicativo para registrar a tarefa em segundo plano DeviceUseTrigger ou DeviceServicingTrigger . Desregistrar sua tarefa em segundo plano utilizando o método Unregister da classe BackgroundTaskRegistration faz com que a infraestrutura de tarefas em segundo plano cancele sua tarefa em segundo plano.
Além disso, o método Unregister usa um valor booliano verdadeiro ou falso para indicar se as instâncias em execução da tarefa em segundo plano devem ser canceladas sem permitir que elas sejam concluídas. Para obter mais informações, consulte a referência de API para BackgroundTaskRegistration.Unregister.