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


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

Чтобы обеспечить оптимальный интерфейс для пользователей, 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 xmlns: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>

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

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 xmlns: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, она может выполняться неограниченное время. Если для приложения установлено значение "Управляется Windows", то к нему все еще может быть применена квота энергии, и его фоновые задачи не будут активированы, когда включен режим экономии заряда батареи. Это можно изменить с параметрами ОС. Дополнительную информацию см. в Оптимизация фоновой активности.

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

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

См. также

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