Sincronização e atualização de dispositivo para aplicativos de dispositivo da Store no Windows 8.1

No Windows 8.1, seu aplicativo UWP pode usar uma tarefa em segundo plano do dispositivo para sincronizar dados no dispositivo periférico. Se seu aplicativo estiver associado a 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 de 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 sincronização e atualização de dispositivo, crie uma tarefa em segundo plano de dispositivo que use DeviceUseTrigger e DeviceServicingTrigger, respectivamente. Para saber como isso é feito com o exemplo de dispositivo USB personalizado, consulte Criando uma tarefa em segundo plano de dispositivo.

Observação

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, dispositivos de interface humana (HID), dispositivos Bluetooth e muito mais. Para obter mais informações, consulte Integrando 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. Isso permite que outro aplicativo fique em primeiro plano. Quando um aplicativo é suspenso, ele reside na memória, e o Windows interrompe sua execução. Quando isso acontecer, sem a ajuda de uma tarefa em segundo plano do dispositivo, todas as operações em andamento do dispositivo, como sincronização e atualização, serão interrompidas. O Windows 8.1 fornece dois novos gatilhos de tarefas em segundo plano que permitem que seu aplicativo execute operações de sincronização e atualização de longa duração em seu dispositivo periférico com segurança em segundo plano, mesmo que o aplicativo esteja suspenso: DeviceUseTrigger e DeviceServicingTrigger. Para saber mais sobre suspensão de aplicativos, veja Iniciando, retomando e realizando multitarefas.

Gatilho de tarefas em segundo plano Requer metadados do dispositivo Descrição
DeviceUseTrigger Não Permite operações de sincronização de longa duração de ou para o dispositivo periférico enquanto o aplicativo está suspenso. A sincronização do dispositivo em segundo plano requer que o usuário tenha aprovado a sincronização em segundo plano pelo aplicativo. Seu dispositivo também deve estar conectado ou emparelhado com o PC, com E/S ativa, e é permitido um máximo de 10 minutos de atividade em segundo plano. Mais detalhes sobre a aplicação de políticas são descritos posteriormente neste tópico.
DeviceServicingTrigger Sim Permite atualizações de dispositivo de longa duração, por exemplo, transferências de configurações ou atualizações de firmware, enquanto seu aplicativo está suspenso. A atualização do dispositivo em segundo plano requer a aprovação do usuário sempre que a tarefa em segundo plano é usada. Ao contrário da tarefa em segundo plano DeviceUseTrigger, a tarefa em segundo plano DeviceServicingTrigger permite a reinicialização e desconexão do dispositivo e possibilita um máximo de 30 minutos de atividade em segundo plano. Mais detalhes sobre a aplicação de políticas são descritos posteriormente neste tópico.

DeviceServicingTrigger requer metadados do dispositivo porque o aplicativo deve ser especificado como um aplicativo privilegiado para executar operações de atualização do dispositivo.

Privilégio do aplicativo

Algumas operações críticas do dispositivo, como atualizações de dispositivo de longa duração, podem ser executadas apenas por um aplicativo privilegiado. Um aplicativo privilegiado é o aplicativo que o fabricante do dispositivo autorizou a executar essas operações. Os metadados do dispositivo especificam qual aplicativo, se houver, foi 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 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 meio de protocolos que não são suportados pelas tarefas acionadas pelo sistema normalmente usadas por aplicativos UWP.

Protocolo DeviceServicingTrigger DeviceUseTrigger Gatilhos do sistema
USB deviceservicingtrigger supports usb. deviceusetrigger supports usb system triggers do not support usb
HID deviceservicingtrigger supports hid. deviceusetrigger supports hid system triggers do not support hid
Bluetooth RFCOMM deviceservicingtrigger supports bluetooth rfcomm. deviceusetrigger supports bluetooth rfcomm system triggers do not support bluetooth rfcomm
Bluetooth GATT deviceservicingtrigger supports bluetooth gatt. deviceusetrigger supports bluetooth gatt system triggers do not support bluetooth gatt
MTP deviceservicingtrigger supports mtp. deviceusetrigger does not support mtp system triggers do not support mtp
Rede com fio deviceservicingtrigger supports network wired. deviceusetrigger does not support network wired system triggers do not support network wired
Rede Wi-Fi deviceservicingtrigger supports networked wi-fi. deviceusetrigger does not support networked wi-fi system triggers do not support network wi-fi
IDeviceIOControl deviceservicingtrigger supports ideviceiocontrol. deviceusetrigger does not support ideviceiocontrol system triggers do not support ideviceiocontrol

Registrando tarefas em segundo plano no manifesto do pacote de aplicativos

Seu aplicativo executará operações de sincronização e atualização no código executado como parte de uma tarefa em segundo plano. Esse código é incorporado 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 em primeiro plano, como é feito para tarefas em segundo plano acionadas 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>

Utilizando o dispositivo com tarefas em segundo plano do dispositivo

Para desenvolver seu aplicativo para aproveitar as tarefas em segundo plano DeviceUseTrigger e DeviceServicingTrigger, siga estas etapas básicas. Para obter mais informações sobre tarefas em segundo plano, consulte Dar suporte ao aplicativo com tarefas em segundo plano.

  1. Seu aplicativo registra sua tarefa em segundo plano no manifesto do aplicativo e incorpora 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.

  2. 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.

  3. Seu aplicativo verifica se a tarefa em segundo plano foi registrada anteriormente e, se não, a registra no gatilho do dispositivo. Observe que seu aplicativo não tem permissão para definir condições na tarefa associada a esse gatilho.

  4. 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.

  5. 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 será executada com prioridade reduzida para manter os aplicativos em primeiro plano responsivos.

  6. Em seguida, o Windows validará, com base no tipo de gatilho, que as políticas necessárias foram atendidas, incluindo a solicitação de consentimento do usuário para a operação antes de iniciar a tarefa em segundo plano.

  7. O Windows monitora as condições do sistema e o tempo de execução da tarefa e, se necessário, cancelará a tarefa se as condições necessárias não forem mais atendidas.

  8. Quando as tarefas em segundo plano relatarem o progresso ou a conclusão, o aplicativo receberá 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 o DeviceServicingTrigger foi introduzida no Windows 8.1 e é limitada apenas a tarefas em segundo plano do dispositivo.

  • Determinadas políticas são impostas pelo Windows para garantir o consentimento do usuário ao atualizar seus dispositivos periféricos. Políticas adicionais são aplicadas para preservar a vida útil da bateria do usuário ao sincronizar e atualizar dispositivos periféricos.

  • As tarefas em segundo plano que usam DeviceUseTrigger e DeviceServicingTrigger podem ser canceladas pelo Windows quando determinados requisitos de diretiva não forem mais atendidos, incluindo uma quantidade máxima de tempo em segundo plano (tempo de relógio). É 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 de dispositivo com o DeviceUseTrigger.

Ao usar DeviceUseTrigger ou DeviceServicingTrigger, o Windows 8.1 impõe políticas para garantir que o usuário tenha dado permissão ao seu aplicativo para acessar seu dispositivo em segundo plano para sincronizar e atualizar conteúdo. As políticas também são aplicadas para ajudar a preservar a vida útil da bateria do usuário ao sincronizar e atualizar dispositivos periféricos.

Uma tarefa em segundo plano que usa DeviceUseTrigger requer um consentimento único do usuário, 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 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.

device sync user consent message dialog.

Se os usuários mudarem de ideia mais tarde, poderão revogar permissões em Configurações.

device sync permissions setting dialog.

Ao contrário daqueles que usam DeviceUseTrigger, as tarefas em segundo plano que usam a tarefa em segundo plano DeviceServicingTrigger exigem o consentimento do usuário sempre que a tarefa em segundo plano é acionada. E esse consentimento não é armazenado, como ocorre para DeviceUseTrigger. Isso ocorre devido às operações de maior risco envolvidas com as atualizações de firmware do dispositivo e ao maior tempo necessário para atualizações do dispositivo. Além de obter o consentimento do usuário, o Windows fornecerá aos usuários informações sobre atualizações de dispositivo, como um aviso para manter o dispositivo conectado durante toda a atualização e garantir que o computador seja carregado, e o tempo aproximado de execução da operação (se o aplicativo fornecê-lo).

device update user consent message dialog.

Restrições de frequência e primeiro plano

Não há restrição sobre a 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 tarefa em segundo plano) e poderá iniciar uma tarefa em segundo plano somente enquanto seu aplicativo estiver em primeiro plano. Quando seu aplicativo não está em primeiro plano, ele não consegue 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 que a primeira tarefa em segundo plano seja concluída.

Políticas de tarefas 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 tarefas

Esta tabela indica quais diretivas de iniciação de tarefa se aplicam a cada gatilho de tarefa em segundo plano.

Política DeviceServicingTrigger DeviceUseTrigger
Seu aplicativo UWP está em primeiro plano ao disparar a tarefa em segundo plano. policy applies. policy applies
Seu dispositivo está conectado ao sistema (ou ao alcance de um dispositivo sem fio). policy applies. policy applies
Sua tarefa em segundo plano consome 400ms de tempo de CPU (supondo uma CPU de 1 GHz) a cada minuto quando a tela está bloqueada, ou a cada 5 minutos quando a tela não está bloqueada. O não cumprimento da política pode resultar no cancelamento da sua tarefa. policy applies. policy applies
Seu dispositivo pode ser acessado pelo 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 conseguir acessar o dispositivo, o acesso às tarefas em segundo plano será negado. policy applies. policy applies
O ponto de entrada da tarefa em segundo plano fornecido pelo aplicativo é registrado no manifesto do pacote do aplicativo. policy applies. policy applies
O usuário deu permissão para a tarefa continuar. Sempre. Primeira vez, depois controlada por permissões do aplicativo.
A estimativa de tempo fornecida pelo aplicativo é inferior a 30 minutos. policy applies. policy does not apply
O aplicativo é especificado como o aplicativo privilegiado para o dispositivo. (Deve haver uma correspondência completa de ID de aplicativo com a lista de aplicativos privilegiados nos metadados de dispositivo do contêiner de dispositivo.) policy applies. policy does not apply
O computador tem mais de 33% de capacidade da bateria restante ou está com alimentação CA. policy applies. policy does not apply
Apenas uma tarefa em segundo plano do dispositivo está sendo executada por tipo de operação. policy check applies. policy applies

Verificações de política de tempo de execução

O Windows impõe os seguintes requisitos de política de tempo de execução enquanto sua tarefa está sendo executada em segundo plano. Se qualquer um dos requisitos de tempo de execução deixar de ser verdadeiro, o Windows cancelará a tarefa em segundo plano do dispositivo.

Esta tabela indica quais políticas de tempo de execução se aplicam a cada gatilho de tarefa em segundo plano.

Verificação de política DeviceServicingTrigger DeviceUseTrigger
Limite de tempo de relógio – a quantidade total de tempo que a tarefa do seu aplicativo pode ser executada em segundo plano. 30 minutos 10 minutos
Seu dispositivo está conectado ao sistema (ou ao alcance de um dispositivo sem fio). policy does not apply. policy check applies
A tarefa é executar E/S regulares para o dispositivo (1 E/S a cada 5 segundos). policy does not apply. policy check applies
O aplicativo não cancelou a tarefa. policy check applies. policy check applies
O aplicativo não foi encerrado. policy check applies. policy check applies

Práticas recomendadas

A seguir estão 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

Usar as tarefas em segundo plano DeviceUseTrigger ou DeviceServicingTrigger do seu aplicativo garante que todas as operações de sincronização ou atualização de dispositivo iniciadas a partir do aplicativo em primeiro plano continuem sendo executadas em segundo plano se os usuários trocarem de aplicativo e o aplicativo em primeiro plano for suspenso pelo Windows. Recomendamos seguir este modelo geral para registrar, acionar e cancelar o registro de suas tarefas em segundo plano:

  1. Registre a tarefa em segundo plano antes de solicitar o gatilho.

  2. Conecte manipuladores de eventos de progresso e conclusão ao seu gatilho. Quando seu aplicativo retornar da suspensão, o Windows fornecerá ao aplicativo todos os eventos de progresso ou conclusão em fila que possam ser usados para determinar o status das tarefas em segundo plano.

  3. 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.

  4. Registre o gatilho.

  5. Quando uma tarefa for concluída, cancele o registro da tarefa em segundo plano. Quando a 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 em seu aplicativo UWP.

  6. Registre-se para eventos de cancelamento de sua classe de tarefa em segundo plano. O registro para eventos de cancelamento permitirá 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.

  7. Ao sair do aplicativo (não suspensão), cancele o registro e cancele todas as tarefas em execução.

    • Quando seu aplicativo for encerrado, cancele o registro e cancele todas as tarefas em execução.

    • Quando o aplicativo for encerrado, as tarefas em segundo plano serão canceladas, e todos os manipuladores de eventos existentes serão desconectados das tarefas em segundo plano existentes. Isso impede que você determine o estado de suas tarefas em segundo plano. Cancelar o registro e cancelar a tarefa em segundo plano permitirá que seu código de cancelamento interrompa suas tarefas em segundo plano.

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.

Cancelando uma tarefa em segundo plano

Para cancelar uma tarefa em execução em segundo plano a partir 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. Cancelar o registro da tarefa em segundo plano usando o método Unregister em BackgroundTaskRegistration fará com que a infraestrutura da tarefa em segundo plano cancele a tarefa em segundo plano.

O método Unregister usa adicionalmente um valor booleano true ou false 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 da API para BackgroundTaskRegistration.Unregister.

Criando uma tarefa em segundo plano do dispositivo

Exemplo de dispositivo USB personalizado

Inicialização, continuação e multitarefa

Dar suporte ao seu aplicativo com tarefas em segundo plano