Synchronisation et mise à jour de périphérique pour les applications de périphériques du Windows Store dans Windows 8.1

Dans Windows 8.1, votre application UWP peut utiliser une tâche d’arrière-plan de périphérique pour synchroniser les données sur votre périphérique. Si votre application est associée à des métadonnées de périphérique, cette application de périphérique UWP peut également utiliser un agent d’arrière-plan de périphérique pour effectuer des mises à jour de périphérique, telles que des mises à jour de micrologiciel. Les agents d’arrière-plan de périphérique sont soumis à des politiques qui garantissent le consentement de l’utilisateur et aident à préserver la durée de vie de la batterie pendant la synchronisation et la mise à jour des périphériques.

Pour effectuer des opérations de synchronisation et de mise à jour de périphérique, créez une tâche d’arrière-plan de périphérique qui utilise respectivement les DeviceUseTrigger et DeviceServicingTrigger. Pour apprendre comment cela se fait avec l’exemple de périphérique USB personnalisé, veuillez consulter la rubrique Création d’une tâche d’arrière-plan de périphérique.

Remarque

Les API de périphérique de Windows Runtime ne nécessitent pas de métadonnées de périphérique. Cela signifie que votre application n’a pas besoin d’être une application UWP pour périphérique pour les utiliser. Les applications UWP peuvent utiliser ces API pour accéder aux périphériques USB, aux périphériques d’interface humaine (HID), aux périphériques Bluetooth, et plus encore. Pour plus d’informations, veuillez consulter la rubrique Intégration des périphériques.

Vue d’ensemble des tâches d’arrière-plan de périphérique

Lorsque les utilisateurs déplacent votre application UWP hors écran, Windows suspend votre application en mémoire. Cela permet à une autre application d’avoir le premier plan. Lorsqu’une application est suspendue, elle est résidente en mémoire et Windows l’a arrêtée de s’exécuter. Lorsque cela se produit, sans l’aide d’une tâche d’arrière-plan de périphérique, toutes les opérations de périphérique en cours telles que la synchronisation et la mise à jour seront interrompues. Windows 8.1 fournit deux nouveaux déclencheurs de tâches d’arrière-plan qui permettent à votre application d’effectuer des opérations de synchronisation et de mise à jour de longue durée sur votre périphérique en toute sécurité en arrière-plan, même si votre application est suspendue : DeviceUseTrigger et DeviceServicingTrigger. Pour plus d’informations sur la suspension d’application, veuillez consulter la section Lancement, reprise et multitâche.

Déclencheur de tâche d’arrière-plan Nécessite des métadonnées de périphérique Description
DeviceUseTrigger Non Permet des opérations de synchronisation de longue durée vers ou depuis votre périphérique pendant que votre application est suspendue. La synchronisation de votre périphérique en arrière-plan nécessite que votre utilisateur ait approuvé la synchronisation en arrière-plan par votre application. Votre périphérique doit également être connecté à ou associé au PC, avec une E/S active, et est autorisé à un maximum de 10 minutes d’activité en arrière-plan. Plus de détails sur l’application des politiques sont décrits plus loin dans ce sujet.
DeviceServicingTrigger Oui Permet des mises à jour de périphérique de longue durée, par exemple des transferts de paramètres ou des mises à jour de micrologiciel, pendant que votre application est suspendue. La mise à jour de votre périphérique en arrière-plan nécessite l’approbation de l’utilisateur à chaque fois que la tâche d’arrière-plan est utilisée. Contrairement à la tâche d’arrière-plan DeviceUseTrigger, la tâche d’arrière-plan DeviceServicingTrigger permet un redémarrage et une déconnexion du périphérique et permet un maximum de 30 minutes d’activité en arrière-plan. Plus de détails sur l’application des politiques sont décrits plus loin dans ce sujet.

DeviceServicingTrigger nécessite des métadonnées de périphérique car l’application doit être spécifiée comme une application privilégiée pour effectuer des opérations de mise à jour de périphérique.

Privilège d’application

Certaines opérations de périphérique critiques, telles que les mises à jour de périphérique de longue durée, ne peuvent être effectuées que par une application privilégiée. Une application privilégiée est l’application que le fabricant de périphérique a autorisée à effectuer ces opérations. Les métadonnées de périphérique spécifient quelle application, le cas échéant, a été désignée comme l’application privilégiée pour un périphérique.

Lors de la création de vos métadonnées de périphérique avec l’assistant de métadonnées de périphérique, spécifiez votre application sur la page Spécifier les informations de l’application de périphérique UWP. Pour plus d’informations, veuillez consulter la section Étape 2 : Créer des métadonnées de périphérique pour votre application de périphérique UWP.

Protocoles pris en charge

Les tâches d’arrière-plan de périphérique qui utilisent DeviceUseTrigger et DeviceServicingTrigger permettent à votre application de communiquer avec des périphériques sur des protocoles qui ne sont pas pris en charge par les tâches déclenchées par le système généralement utilisées par les applications UWP.

Protocol DeviceServicingTrigger DeviceUseTrigger Déclencheurs système
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
Réseau câblé deviceservicingtrigger supports network wired. deviceusetrigger does not support network wired system triggers do not support network wired
Réseau 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

Enregistrement des tâches d’arrière-plan dans le manifeste de package d’application

Votre application effectuera des opérations de synchronisation et de mise à jour dans le code qui s’exécute dans le cadre d’une tâche d’arrière-plan. Ce code est intégré dans une classe Windows Runtime qui implémente IBackgroundTask (ou dans une page JavaScript dédiée pour les applications JavaScript). Pour utiliser une tâche d’arrière-plan de périphérique, votre application doit la déclarer dans le fichier manifeste de package de l’application d’une application en premier plan, comme elle le fait pour les tâches d’arrière-plan déclenchées par le système.

Dans cet exemple de fichier manifeste de package d’application, DeviceLibrary.SyncContent et DeviceLibrary.UpdateFirmware sont des points d’entrée de l’application en premier plan. DeviceLibrary.SyncContent est le point d’entrée de la tâche d’arrière-plan qui utilise le DeviceUseTrigger. DeviceLibrary.SyncContent est le point d’entrée de la tâche d’arrière-plan qui utilise le 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>

Utilisation de votre périphérique avec des tâches d’arrière-plan de périphérique

Pour développer votre application afin de tirer parti des tâches d’arrière-plan DeviceUseTrigger et DeviceServicingTrigger, suivez cet ensemble de étapes de base. Pour plus d’informations sur les tâches d’arrière-plan, veuillez consulter la rubrique Prise en charge de votre application avec des tâches d’arrière-plan.

  1. Votre application enregistre sa tâche d’arrière-plan dans le manifeste de package de l’application et intègre le code de la tâche d’arrière-plan dans une classe Windows Runtime qui implémente IBackgroundTask ou dans une page JavaScript dédiée pour les applications JavaScript.

  2. Lorsque votre application démarre, elle créera et configurera un objet déclencheur de périphérique du type approprié, DeviceUseTrigger ou DeviceServicingTrigger, et stockera l’instance de déclencheur pour une utilisation future.

  3. Votre application vérifie si la tâche d’arrière-plan a été précédemment enregistrée et, si ce n’est pas le cas, l’enregistre contre le déclencheur de périphérique. Notez que votre application n’est pas autorisée à définir des conditions sur la tâche associée à ce déclencheur.

  4. Lorsque votre application doit déclencher la tâche d’arrière-plan, elle appelle la méthode d’activation RequestAsync sur l’objet déclencheur de périphérique.

  5. Votre tâche d’arrière-plan n’est pas limitée comme d’autres tâches d’arrière-plan système (il n’y a pas de quota de temps CPU) mais s’exécutera avec une priorité réduite pour maintenir la réactivité des applications en premier plan.

  6. Windows validera ensuite, en fonction du type de déclencheur, que les politiques nécessaires ont été respectées, notamment en demandant le consentement de l’utilisateur pour l’opération avant de démarrer la tâche d’arrière-plan.

  7. Windows surveille les conditions du système et le temps d’exécution des tâches, et, si nécessaire, annule la tâche si les conditions requises ne sont plus remplies.

  8. Lorsque les tâches d’arrière-plan signalent des progrès ou des achèvements, votre application recevra ces événements via les événements de progression et d’achèvement de la tâche enregistrée.

Points importants à considérer lors de l’utilisation des tâches d’arrière-plan de périphérique

  • La capacité de déclencher de manière programmatique des tâches d’arrière-plan qui utilisent les déclencheurs DeviceUseTrigger et DeviceServicingTrigger a été introduite dans Windows 8.1 et est limitée aux tâches d’arrière-plan de périphérique uniquement.

  • Certaines politiques sont appliquées par Windows pour garantir le consentement de l’utilisateur lors de la mise à jour de leurs périphériques. Des politiques supplémentaires sont appliquées pour préserver la durée de vie de la batterie de l’utilisateur lors de la synchronisation et de la mise à jour des périphériques.

  • Les tâches d’arrière-plan qui utilisent DeviceUseTrigger et DeviceServicingTrigger peuvent être annulées par Windows lorsque certaines exigences de politique ne sont plus respectées, notamment un temps d’arrière-plan maximal (temps du monde). Il est important de prendre en compte ces exigences de politique lors de l’utilisation de ces tâches d’arrière-plan pour interagir avec votre périphérique.

Conseil

Pour voir comment ces tâches d’arrière-plan fonctionnent, téléchargez un exemple. L’exemple de périphérique USB personnalisé montre une tâche d’arrière-plan qui effectue une synchronisation de périphérique avec DeviceUseTrigger.

Lors de l’utilisation de DeviceUseTrigger ou DeviceServicingTrigger, Windows 8.1 applique des politiques pour garantir que l’utilisateur a donné l’autorisation à votre application d’accéder à leur périphérique en arrière-plan pour synchroniser et mettre à jour le contenu. Des politiques sont également appliquées pour aider à préserver la durée de vie de la batterie de l’utilisateur lors de la synchronisation et de la mise à jour des périphériques.

Une tâche d’arrière-plan qui utilise DeviceUseTrigger nécessite un consentement utilisateur unique permettant à votre application de synchroniser en arrière-plan. Ce consentement est stocké par application et par modèle de périphérique. L’utilisateur consent à laisser l’application accéder au périphérique en arrière-plan, tout comme il consent à laisser l’application accéder au périphérique lorsque l’application est à l’avant-plan.

Dans l’exemple suivant, une application nommée Tailspin Toys obtient l’autorisation de l’utilisateur pour synchroniser en arrière-plan.

device sync user consent message dialog.

Si les utilisateurs changent d’avis plus tard, ils peuvent révoquer les autorisations dans Paramètres.

device sync permissions setting dialog.

Contrairement à ceux qui utilisent DeviceUseTrigger, les tâches d’arrière-plan qui utilisent la tâche d’arrière-plan DeviceServicingTrigger nécessitent le consentement de l’utilisateur chaque fois que la tâche d’arrière-plan est déclenchée. Et ce consentement n’est pas stocké comme il l’est pour DeviceUseTrigger. Cela est dû aux opérations à plus haut risque impliquées dans les mises à jour de micrologiciel de périphérique et à la plus longue durée nécessaire pour les mises à jour de périphérique. En plus d’obtenir le consentement de l’utilisateur, Windows fournira aux utilisateurs des informations sur les mises à jour de périphérique, comme un avertissement pour maintenir le périphérique connecté tout au long de la mise à jour et s’assurer que le PC est chargé, et la durée approximative de l’opération (si votre application le fournit).

device update user consent message dialog.

Restrictions de fréquence et de premier plan

Il n’y a aucune restriction sur la fréquence à laquelle votre application peut initier des opérations, mais votre application ne peut exécuter qu’une seule opération de tâche d’arrière-plan DeviceUseTrigger ou DeviceServicingTrigger à la fois (cela n’affecte pas les autres types de tâches d’arrière-plan), et peut initier une tâche d’arrière-plan uniquement lorsque votre application est à l’avant-plan. Lorsque votre application n’est pas à l’avant-plan, elle ne peut pas initier de tâche d’arrière-plan avec DeviceUseTrigger ou DeviceServicingTrigger. Votre application ne peut pas initier une deuxième tâche d’arrière-plan de périphérique avant que la première tâche d’arrière-plan ne soit terminée.

Politiques des tâches d’arrière-plan de périphérique

Windows applique des politiques lorsque votre application utilise une tâche d’arrière-plan de périphérique. Si ces politiques ne sont pas respectées, la tâche d’arrière-plan utilisant DeviceUseTrigger ou DeviceServicingTrigger peut être annulée. Il est important de prendre en compte ces exigences de politique lors de l’utilisation de tâches d’arrière-plan de périphérique pour interagir avec votre périphérique.

Politiques d’initiation des tâches

Ce tableau indique quelles politiques d’initiation des tâches s’appliquent à chaque déclencheur de tâche d’arrière-plan.

Stratégie DeviceServicingTrigger DeviceUseTrigger
Votre application UWP est à l’avant-plan lors du déclenchement de la tâche d’arrière-plan. policy applies. policy applies
Votre périphérique est attaché au système (ou à portée pour un périphérique sans fil). policy applies. policy applies
Votre tâche d’arrière-plan consomme 400 ms de temps CPU (en supposant un CPU à 1 GHz) toutes les minutes lorsque l’écran est verrouillé, ou toutes les 5 minutes lorsque l’écran n’est pas verrouillé. Le non-respect de cette politique peut entraîner l’annulation de votre tâche. policy applies. policy applies
Votre périphérique est accessible à l’application utilisant les API périphériques (les API Windows Runtime pour USB, HID, Bluetooth, etc.). Si votre application ne peut pas accéder au périphérique, l’accès aux tâches d’arrière-plan est refusé. policy applies. policy applies
Le point d’entrée de la tâche d’arrière-plan fourni par l’application est enregistré dans le manifeste de package de l’application. policy applies. policy applies
L’utilisateur a donné la permission à la tâche de continuer. À chaque fois. La première fois, puis contrôlé par les autorisations d’application.
L’estimation du temps fournie par l’application est inférieure à 30 minutes. policy applies. policy does not apply
L’application est spécifiée comme l’application privilégiée pour le périphérique. (Il doit y avoir une correspondance complète de l’ID de l’application par rapport à la liste des applications privilégiées dans les métadonnées de périphérique du conteneur de périphérique). policy applies. policy does not apply
L’ordinateur a plus de 33 % de capacité de batterie restante ou est sur secteur. policy applies. policy does not apply
Une seule tâche d’arrière-plan de périphérique est en cours d’exécution par type d’opération. policy check applies. policy applies

Vérifications de politique d’exécution

Windows applique les exigences de politique d’exécution suivantes pendant que votre tâche s’exécute en arrière-plan. Si l’une des exigences d’exécution cesse d’être vraie, Windows annulera votre tâche d’arrière-plan de périphérique.

Ce tableau indique quelles politiques d’exécution s’appliquent à chaque déclencheur de tâche d’arrière-plan.

Vérification de la politique DeviceServicingTrigger DeviceUseTrigger
Limite de temps de l’horloge murale – le temps total pendant lequel la tâche de votre application peut s’exécuter en arrière-plan. 30 minutes 10 minutes
Votre périphérique est attaché au système (ou à portée pour un périphérique sans fil). policy does not apply. policy check applies
La tâche effectue des E/S régulières vers le périphérique (1 E/S toutes les 5 secondes). policy does not apply. policy check applies
L’application n’a pas annulé la tâche. policy check applies. policy check applies
L’application n’a pas quitté. policy check applies. policy check applies

Bonnes pratiques

Les pratiques recommandées suivantes sont à considérer pour les applications de périphérique UWP qui utilisent les tâches d’arrière-plan de périphérique.

Modèle de programmation des tâches d’arrière-plan de périphérique

L’utilisation des tâches d’arrière-plan DeviceUseTrigger ou DeviceServicingTrigger à partir de votre application garantit que toutes les opérations de synchronisation ou de mise à jour de périphérique démarrées à partir de votre application en premier plan continuent de s’exécuter en arrière-plan si vos utilisateurs passent à d’autres applications et que votre application en premier plan est suspendue par Windows. Nous vous recommandons de suivre ce modèle global d’enregistrement, de déclenchement et de désenregistrement de vos tâches d’arrière-plan :

  1. Enregistrez la tâche d’arrière-plan avant de demander le déclencheur.

  2. Connectez des gestionnaires d’événements de progression et de terminaison à votre déclencheur. Lorsque votre application revient de la suspension, Windows fournira à votre application tous les événements de progression ou de terminaison mis en file d’attente qui peuvent être utilisés pour déterminer l’état de vos tâches d’arrière-plan.

  3. Fermez tous les objets de périphérique ouverts lorsque vous déclenchez vos tâches d’arrière-plan DeviceUseTrigger ou DeviceServicingTrigger afin que ces périphériques soient libres d’être ouverts et utilisés par votre tâche d’arrière-plan.

  4. Enregistrez le déclencheur.

  5. Lorsqu’une tâche est terminée, désenregistrez la tâche d’arrière-plan. Lorsque votre tâche d’arrière-plan est terminée, vous pouvez désenregistrer les tâches d’arrière-plan et réouvrir le périphérique et l’utiliser régulièrement à partir de votre application UWP.

  6. Enregistrez-vous pour les événements d’annulation à partir de la classe de votre tâche d’arrière-plan. L’enregistrement des événements d’annulation permet à votre code de tâche d’arrière-plan d’arrêter proprement votre tâche d’arrière-plan en cours d’exécution lorsqu’elle est annulée par Windows ou votre application en premier plan.

  7. À la sortie de l’application (pas de suspension), désenregistrez et annulez toutes les tâches en cours d’exécution.

    • Lorsque votre application se ferme, désenregistrez et annulez toutes les tâches en cours d’exécution.

    • Lorsque votre application se ferme, vos tâches d’arrière-plan seront annulées et tous les gestionnaires d’événements existants seront déconnectés de vos tâches d’arrière-plan existantes. Cela vous empêche de déterminer l’état de vos tâches d’arrière-plan. Le désenregistrement et l’annulation de la tâche d’arrière-plan garantissent que vos tâches d’arrière-plan se ferment proprement et que Windows nettoie tous les gestionnaires d’événements associés.

Conseil

Pour obtenir une description détaillée de la façon dont cela est effectué avec l’exemple d’appareil USB personnalisé, consultez la section Création d’une tâche en arrière-plan d’appareil.

Annulation d’une tâche en arrière-plan

Pour annuler une tâche exécutée en arrière-plan à partir de votre application d’avant-plan, utilisez la méthode Unregister sur l’objet BackgroundTaskRegistration que vous utilisez dans votre application pour inscrire la tâche en arrière-plan DeviceUseTrigger ou DeviceServicingTrigger. L’annulation de l’inscription de votre tâche en arrière-plan à l’aide de la méthode Unregister sur BackgroundTaskRegistration entraîne l’annulation de l’infrastructure des tâches en arrière-plan pour annuler votre tâche en arrière-plan.

La méthode Unregister prend également une valeur booléenne true ou false pour indiquer si les instances en cours d’exécution de votre tâche en arrière-plan doivent être annulées sans leur permettre de terminer. Pour plus d’informations, consultez la référence de l’API pour BackgroundTaskRegistration.Unregister.

Création d’une tâche en arrière-plan d’appareil

Exemple d’appareil USB personnalisé

Launching, resuming, and multitasking

Prise en charge de votre application avec des tâches en arrière-plan