如何增加后台任务的运行时间?

Posted

技术标签:

【中文标题】如何增加后台任务的运行时间?【英文标题】:How to increase the runtime of a background task? 【发布时间】:2018-01-29 15:39:48 【问题描述】:

所以我在 UWP 上有一个后台任务,可以从服务器下载数据。此任务可能需要一分钟,具体取决于 Internet 速度。我发现当我的用户最小化应用程序时下载被暂停,所以决定在BackgroundTask上运行它

测试时我发现我的下载没有完成,后来从this link发现后台任务有限制:

后台任务的使用时间限制为 30 秒。

但经过一番谷歌搜索后,我发现this link 提到了一种增加后台任务超时的方法

在通用 Windows 平台中,后台任务是 在后台运行,无需任何形式的用户界面。背景 任务通常最多可以运行 25 秒 他们被取消了。一些运行时间较长的任务也有检查 确保后台任务没有闲置或使用 记忆。在 Windows 创意者更新(版本 1703)中, 引入了extendedBackgroundTaskTime 受限功能 删除这些限制。 extendedBackgroundTaskTime 能力是 在应用的清单文件中添加为受限功能:

Package.appxmanifest

XML

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

此功能消除了执行时间 限制和空闲任务看门狗

但将以上内容添加到我的 package.appxmanifest 文件后,我收到以下错误:

“Package.appxmanifest”文件的内容不是格式正确的 XML。 'rescap' 是一个未声明的前缀

那么是否可以从我的应用程序中删除此后台任务限制?

【问题讨论】:

阅读您找到的那篇文章中的链接,尤其是this one。 @MikeMcCaughan 我可以看到它说“没有人可以请求访问这些功能以进行商店提交。”在extendedBackgroundTaskTime 下。这是否意味着它不可能做我上面想做的事情? 我不知道。我刚刚读到您收到有关 rescap 的错误,知道它是一个基本的 XML 命名空间验证,并且阅读了足够多的文章以了解他们在哪里添加命名空间。 你确定你把它正确地压缩到文件中了吗? 另外这篇文章指定长期下载code.msdn.microsoft.com/windowsapps/…和文档docs.microsoft.com/en-us/windows/uwp/networking/… 【参考方案1】:

正如 Mike McCaughan 在有关问题的 cmets 中所观察到的,对于您所看到的特定错误,最可能的解释是您根本没有在封闭的 Package 元素上声明 rescap 命名空间正在被功能标签引用:

<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

信息取自documentation provided by Microsoft here。

【讨论】:

【参考方案2】:

UWP 具有一项功能,可让您对下载进行排队,即使应用关闭也可以完成。 查看this article,它解释了如何使用此功能。

如果您仍想从后台任务开始下载,则让后台任务调用该功能,这样,当后台任务到期时,下载将继续并由 Windows 和 UWP 管理。

【讨论】:

以上是关于如何增加后台任务的运行时间?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 后台网络任务如何运行

后台任务永远运行?

如何在 React Native 中运行后台任务?

如何只运行一次 Django 后台任务

在不运行应用程序的情况下注册后台任务

如何在 Flutter 中让任务在后台运行