Partager via


Exécuter indéfiniment en arrière-plan

Pour offrir une expérience optimale aux utilisateurs, Windows impose des limites de ressources aux applications plateforme Windows universelle (UWP). Les applications de premier plan reçoivent le plus de temps de mémoire et d’exécution ; Les applications en arrière-plan obtiennent moins. Les utilisateurs sont donc protégés contre les performances médiocres de l’application de premier plan et le drainage de batterie lourd.

Toutefois, les développeurs écrivant des applications UWP pour une utilisation personnelle (c’est-à-dire des applications chargées côté qui ne seront pas publiées dans le Microsoft Store) ou des développeurs écrivant des applications UWP d’entreprise, peuvent vouloir utiliser toutes les ressources disponibles sur l’appareil sans limitation d’exécution en arrière-plan ou étendue. Les applications UWP professionnelles et personnelles peuvent utiliser des API dans Windows Creators Update (version 1703) pour désactiver la limitation. Sachez que vous ne pouvez pas placer une application dans le Microsoft Store si elle utilise ces API.

Exécuter pendant la réduction

Les applications UWP passent à un état suspendu lorsqu’elles ne s’exécutent pas au premier plan. Sur le bureau, cela se produit lorsqu’un utilisateur réduit l’application. Les applications utilisent une session d’exécution étendue pour continuer à s’exécuter pendant la réduction. Les API d’exécution étendue acceptées par le Microsoft Store sont détaillées dans Report app suspension with extended execution.

Si vous développez une application qui n’est pas destinée à être envoyée dans le Microsoft Store, vous pouvez utiliser ExtendedExecutionForegroundSession avec la extendedExecutionUnconstrained fonctionnalité restreinte afin que votre application puisse continuer à s’exécuter tout en minimisant, quel que soit l’état énergétique de l’appareil.  

La extendedExecutionUnconstrained fonctionnalité est ajoutée en tant que fonctionnalité restreinte dans le manifeste de votre application. Pour plus d’informations sur les fonctionnalités restreintes, consultez les déclarations de fonctionnalités d’application.

Remarque

Ajoutez la déclaration d’espace de noms XML xml et utilisez le préfixe de récap pour déclarer la fonctionnalité.

Pour plus d’informations, consultez la section Fonctionnalités restreintes des déclarations de fonctionnalités d’application.

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>

Lorsque vous utilisez la extendedExecutionUnconstrained fonctionnalité, ExtendedExecutionForegroundSession et ExtendedExecutionForegroundReason sont utilisés plutôt que ExtendedExecutionSession et ExtendedExecutionReason. Le même modèle pour créer la session, définir des membres et demander l’extension de façon asynchrone s’applique toujours :

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;
}

Vous pouvez demander cette session d’exécution étendue dès que l’application est au premier plan. Les sessions d’exécution étendue non contraintes ne sont pas limitées par des quotas d’énergie ou par l’économiseur de batterie du système d’exploitation. Tant qu’une référence à l’objet de session existe, l’application reste dans l’état en cours d’exécution et n’entre pas dans l’état suspendu. Si l’application est fermée par l’utilisateur, la session est révoquée.

L’inscription à l’événement Révoqué permet à votre application d’effectuer tout travail de nettoyage requis. Dans l’état de suspension, vous pouvez créer une session d’exécution étendue avec ExtendedExecutionReason.SavingData pour enregistrer les données utilisateur avant la fin et la suppression de la mémoire de l’application.

Exécuter indéfiniment des tâches en arrière-plan

Dans le plateforme Windows universelle, les tâches en arrière-plan sont des processus qui s’exécutent en arrière-plan sans aucune forme d’interface utilisateur. Les tâches en arrière-plan peuvent généralement s’exécuter pendant un maximum de vingt-cinq secondes avant leur annulation. Certaines des tâches plus longues ont également une vérification pour vous assurer que la tâche en arrière-plan n’est pas inactive ou qu’elle utilise de la mémoire. Dans Windows Creators Update (version 1703), la fonctionnalité restreinte ExtendedBackgroundTaskTime a été introduite pour supprimer ces limites. La fonctionnalité extendedBackgroundTaskTime est ajoutée en tant que fonctionnalité restreinte dans le fichier manifeste de votre application :

Remarque

Ajoutez la déclaration d’espace de noms XML xml et utilisez le préfixe de récap pour déclarer la fonctionnalité.

Pour plus d’informations, consultez la section Fonctionnalités restreintes des déclarations de fonctionnalités d’application.

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>

Cette fonctionnalité supprime les limitations du temps d’exécution et l’agent de surveillance des tâches inactives. Une fois qu’une tâche en arrière-plan a démarré, qu’il s’agisse d’un déclencheur ou d’un appel app service, une fois qu’elle prend un report sur backgroundTaskInstance fournie par la méthode Run, elle peut s’exécuter indéfiniment. Si l’application est définie sur Managed By Windows, elle peut toujours avoir un quota d’énergie qui lui est appliqué, et ses tâches en arrière-plan ne sont pas activées lorsque l’économiseur de batterie est actif. Cela peut être modifié avec les paramètres du système d’exploitation. Vous trouverez plus d’informations dans l’optimisation de l’activité en arrière-plan.

Le plateforme Windows universelle surveille l’exécution des tâches en arrière-plan pour garantir une bonne durée de vie de la batterie et une expérience d’application de premier plan fluide. Toutefois, les applications personnelles et les applications métier d’entreprise peuvent utiliser l’exécution étendue et la fonctionnalité extendedBackgroundTaskTime pour créer des applications qui s’exécutent aussi longtemps que nécessaire, quelle que soit la disponibilité des ressources de l’appareil.

N’oubliez pas que les fonctionnalités extendedExecutionUnconstrained et extendedBackgroundTaskTime peuvent remplacer la stratégie par défaut pour les applications UWP et peuvent entraîner un drainage de batterie important. Avant d’utiliser ces fonctionnalités, vérifiez d’abord que les stratégies d’exécution étendue et de temps de tâche en arrière-plan par défaut ne répondent pas à vos besoins et effectuent des tests dans des conditions limitées à la batterie pour comprendre l’impact que votre application aura sur un appareil.

Voir aussi

Supprimer les restrictions de ressources de tâche en arrière-plan