Как увеличить время выполнения фоновой задачи?

поэтому у меня есть фоновая задача на UWP, которая загружает данные с сервера. Эта задача может занять до минуты в зависимости от скорости интернета. Я обнаружил, что когда мой пользователь сворачивал приложение, загрузка приостанавливалась, поэтому я решил запустить его на BackgroundTask

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

Фоновые задачи ограничены 30 секундами использования настенных часов.

Но еще немного погуглив, я нашел эта ссылка, которая говорит о том, как увеличить время ожидания фоновой задачи

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

Пакет.appxmanifest

XML

 <Package ...> 
    <Capabilities>  
        <rescap:Capability Name="extendedBackgroundTaskTime"/>      
    </Capabilities> 
  </Package> 

Эта возможность снимает ограничения времени выполнения и сторожевой таймер бездействующих задач.

Но после добавления вышеуказанного в мой файл package.appxmanifest я получаю следующую ошибку:

Содержимое файла Package.appxmanifest не является корректным XML. 'rescap' - это необъявленный префикс

Итак, можно ли удалить это ограничение фоновой задачи из моего приложения?


person user1    schedule 29.01.2018    source источник
comment
Прочитайте ссылки в той статье, которую вы нашли, особенно этот.   -  person Heretic Monkey    schedule 29.01.2018
comment
@MikeMcCaughan Я вижу, там написано: «Никто не может запрашивать доступ к этим возможностям для отправки в магазин». под extendedBackgroundTaskTime. означает ли это, что невозможно сделать то, что я пытаюсь сделать выше?   -  person user1    schedule 29.01.2018
comment
Понятия не имею. Я только что прочитал, что вы получаете сообщение об ошибке о recap, знал, что это базовая вещь проверки пространства имен XML, и прочитал достаточно статьи, чтобы увидеть, где они добавляют пространство имен.   -  person Heretic Monkey    schedule 29.01.2018
comment
Вы уверены, что правильно втиснули его в файл?   -  person BugFinder    schedule 29.01.2018
comment
Фоновый загрузчик docs.microsoft.com/en-us/ UWP/API/   -  person Shubham Sahu    schedule 29.01.2018
comment
Также в этой статье указано для долгосрочной загрузки code.msdn.microsoft.com/ windowsapps/ и документация docs.microsoft.com/ en-us/windows/uwp/networking/   -  person Shubham Sahu    schedule 29.01.2018


Ответы (2)


Как отмечает Майк МакКоган в комментариях к вопросу, наиболее вероятным объяснением конкретной ошибки, которую вы видите, является то, что вы просто не объявили пространство имен rescap во вложенном элементе Package, на который ссылается тег возможности:

<Package
    xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
    xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
    xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
    xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
    IgnorableNamespaces="uap mp wincap rescap">

Нужны ли вам другие пространства имен или нет, я не могу сказать, но ключевым, связанным с делом об ограниченных возможностях, с которым вы спорите, является xmlns:rescap.

Информация взята из документация, предоставленная Microsoft здесь.

person Deltics    schedule 29.01.2018

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

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

person MrCSharp    schedule 29.01.2018