Поделиться через


Выполнение в фоновом режиме в течение неограниченного срока

Чтобы обеспечить оптимальный интерфейс для пользователей, Windows накладывает ограничения ресурсов на приложения универсальная платформа Windows (UWP). Приложения переднего плана получают большую память и время выполнения; фоновые приложения получают меньше. Таким образом, пользователи защищены от плохой производительности приложения переднего плана и тяжелой очистки батареи.

Однако разработчики, пишущие приложения UWP для личного использования (т. е. загруженные на стороне приложения, которые не будут опубликованы в Microsoft Store), или разработчики, пишущие приложения Enterprise UWP, могут использовать все ресурсы, доступные на устройстве без фонового или расширенного регулирования выполнения. Бизнес-приложения и личные приложения UWP могут использовать API в Центре обновления Windows Creators Update (версия 1703) для отключения регулирования. Помните, что вы не можете поместить приложение в Microsoft Store, если он использует эти API.

Выполнение во время свернутого

Приложения UWP перемещаются в приостановленное состояние, если они не выполняются на переднем плане. На рабочем столе это происходит, когда пользователь сворачивать приложение. Приложения используют расширенный сеанс выполнения, чтобы продолжить работу во время свернутого. Api расширенного выполнения, принятые в Microsoft Store, подробно описаны в разделе "Отложить приостановку приложения с расширенным выполнением".

Если вы разрабатываете приложение, которое не предназначено для отправки в Microsoft Store, вы можете использовать ExtendedExecutionForegroundSession с extendedExecutionUnconstrained ограниченными возможностями, чтобы ваше приложение продолжало работать во время минимизации, независимо от состояния энергии устройства.  

Эта extendedExecutionUnconstrained возможность добавляется как ограниченная возможность в манифесте приложения. Дополнительные сведения об ограниченных возможностях см . в объявлениях возможностей приложений.

Примечание.

Добавьте объявление пространства имен XML xml:rescap и используйте префикс rescap для объявления возможности.

Дополнительные сведения см. в разделе "Ограниченные возможности" объявлений возможностей приложений.

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>

При использовании этой возможности используются extendedExecutionForegroundSession и ExtendedExecutionForecutionForegroundReason, а не ExtendedExecutionSession и ExtendedExecutionReason. extendedExecutionUnconstrained Тот же шаблон для создания сеанса, задания членов и асинхронного запроса расширения по-прежнему применяется:

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

Вы можете запросить этот расширенный сеанс выполнения, как только приложение переходит на передний план. Неограниченные расширенные сеансы выполнения не ограничиваются квотами энергии или экономией батареи операционной системы. Если ссылка на объект сеанса существует, приложение будет оставаться в состоянии выполнения и не входить в приостановленное состояние. Если приложение закрыто пользователем, сеанс будет отменен.

Регистрация для отозванного события позволит приложению выполнять все необходимые действия по очистке. В состоянии приостановки можно создать расширенный сеанс выполнения с помощью ExtendedExecutionReason.SaveData , чтобы сохранить пользовательские данные перед завершением и удалением приложения из памяти.

Выполнение фоновых задач неограниченное время

В универсальная платформа Windows фоновые задачи — это процессы, выполняемые в фоновом режиме без какой-либо формы пользовательского интерфейса. Фоновые задачи обычно могут выполняться не более 25 секунд до их отмены. Некоторые из более длительных задач также имеют проверку, чтобы убедиться, что фоновая задача не сидит бездействия или использует память. В Центре обновления Windows Creators Update (версия 1703) была введена ограниченная возможность extendedBackgroundTaskTime , чтобы удалить эти ограничения. Функция extendedBackgroundTaskTime добавляется в виде ограниченной возможности в файле манифеста приложения:

Примечание.

Добавьте объявление пространства имен XML xml:rescap и используйте префикс rescap для объявления возможности.

Дополнительные сведения см. в разделе "Ограниченные возможности" объявлений возможностей приложений.

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>

Эта возможность удаляет ограничения времени выполнения и контрольную задачу простоя. После запуска фоновой задачи, независимо от триггера или вызова службы приложений, после того как она принимает отсрочку в backgroundTaskInstance , предоставляемой методом Run , он может выполняться неограниченное время. Если для приложения задано значение Managed By Windows, то к нему по-прежнему может применяться квота энергии, а фоновые задачи не активируются при активной экономии батареи. Это можно изменить с параметрами ОС. Дополнительные сведения см. в разделе "Оптимизация фонового действия".

Универсальная платформа Windows отслеживает выполнение фоновой задачи, чтобы обеспечить хорошую жизнь батареи и плавное взаимодействие с приложением переднего плана. Однако личные приложения и бизнес-приложения Enterprise могут использовать расширенное выполнение и расширенную функциюBackgroundTaskTime для создания приложений, которые будут работать до тех пор, пока это необходимо, независимо от доступности ресурсов устройства.

Помните, что возможности extendedExecutionUnconstrained и extendedBackgroundTaskTime могут переопределить политику по умолчанию для приложений UWP и может привести к значительному сливу батареи. Прежде чем использовать эти возможности, сначала убедитесь, что политики времени выполнения и фоновой задачи по умолчанию не соответствуют вашим потребностям и выполняют тестирование в условиях, ограниченных батареей, чтобы понять влияние, которое ваше приложение будет иметь на устройстве.

См. также

Удаление ограничений ресурсов фоновой задачи