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

Pour offrir la meilleure expérience aux utilisateurs, Windows impose des limites de ressources aux applications plateforme Windows universelle (UWP). Les applications de premier plan ont le plus de temps de mémoire et d’exécution ; les applications en arrière-plan obtiennent moins. Les utilisateurs sont ainsi protégés contre les mauvaises performances de l’application au premier plan et une forte décharge de la batterie.

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

Exécution en mode réduit

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 afin de continuer à s’exécuter tout en étant réduites. Les API d’exécution étendue acceptées par le Microsoft Store sont détaillées dans Reporter la suspension de l’application avec exécution étendue.

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 étant réduite, 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 Déclarations des fonctionnalités d’application.

Notes

Ajoutez la déclaration d’espace de noms XML xmlns:rescap et utilisez le préfixe rescap pour déclarer la fonctionnalité.

Pour plus d’informations, consultez la section Fonctionnalités restreintes de Déclarations des 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 la création de la session, la définition des membres et la demande de l’extension de manière 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 arrive au premier plan. Les sessions d’exécution étendue sans contrainte ne sont pas limitées par des quotas d’énergie ou par l’économiseur de batterie du système d’exploitation. Tant qu’il existe une référence à l’objet de session, 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 Revoked permet à votre application d’effectuer tous les travaux 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 que l’application ne soit arrêtée et supprimée de la mémoire.

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

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 vingt-cinq secondes maximum avant leur annulation. Certaines des tâches plus longues ont également un case activée pour s’assurer que la tâche en arrière-plan n’est pas inactive ou 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 :

Notes

Ajoutez la déclaration d’espace de noms XML xmlns:rescap et utilisez le préfixe rescap pour déclarer la fonctionnalité.

Pour plus d’informations, consultez la section Fonctionnalités restreintes de Déclarations des 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 de temps d’exécution et la surveillance des tâches inactives. Une fois qu’une tâche en arrière-plan a démarré, que ce soit par un déclencheur ou un appel app service, une fois qu’elle prend un report sur l’objet BackgroundTaskInstance fourni par la méthode Run , elle peut s’exécuter indéfiniment. Si l’application est définie sur Géré par Windows, un quota d’énergie peut toujours lui être 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. Pour plus d’informations, consultez 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 autonomie de la batterie et une expérience d’application au 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écuteront 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 une décharge importante de la batterie. 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 effectuez des tests dans des conditions de batterie limitée pour comprendre l’impact de votre application sur un appareil.

Voir aussi

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