BackgroundTask 内的 BackgroundTransfer

Posted

技术标签:

【中文标题】BackgroundTask 内的 BackgroundTransfer【英文标题】:BackgroundTransfer inside BackgroundTask 【发布时间】:2014-11-23 22:36:46 【问题描述】:

在我的应用程序中,我需要在 TimeTriggered 间隔上同步一些数据。现在我已经用 TimeTrigger 构建了一个 BackgroundTask,在这个任务中我正在运行一个 BackgroundTransfer 操作。这行得通,但我对此有一些疑问。

    这是一个好的解决方案,还是有更好的解决方案?

    有一些神秘的处决事情。如果我将应用程序作为调试版本部署到我的手机上,一切都像一个魅力,所有的传输操作都在 BackgroundTask 的一次执行中完成,这需要 +/- 15 分钟。现在,如果我将应用程序作为发布版本部署到我的手机,BackgroundTask 仅传输数据 1-2 分钟并停止,直到触发 TimeTrigger 的下一次执行。为什么会有差异或为什么会这样?

编辑: 资源密集型任务对我来说不是一个选项,该应用程序是基于 WinRT 商店应用程序构建的。当这是来自 backgroundTask 的限制时,我该如何从后台执行这样的操作?

edit2: @kiewic,我称它为可等待的,会改变这一点,但有什么区别,因为这是在后台任务中执行的?

【问题讨论】:

15 分钟下载?我认为 backgroundtask 不是为这样的工作而设计的。尝试资源密集型任务,但也有一些限制。 操作系统强加了网络和功率上限。 你能贴出你如何调用 StartAsync() 的代码吗?确保你没有在等待这个电话。 【参考方案1】:

您必须区分BackgroundTask 和BackgroundTransfer。这是两个不同的东西。

您的后台任务的工作是开始您的后台传输。 BackgroundTransfer(上传或下载操作)的工作是独立于您的应用程序执行传输

传输不需要在 BackgroundTask 中进行。如果您在后台传输开始时调用 await,您将等待上传完成。如果不这样做,您将继续在任务中执行(例如,如果您处于循环中,您可以开始构建并开始下一次上传)。

一旦您开始后台传输,它将独立于您的应用程序或操作系统的任何任务进行管理。它甚至可以在手机重启后存活下来。

【讨论】:

这对我帮助很大,非常感谢!现在我了解了如何使用后台任务的方式。

以上是关于BackgroundTask 内的 BackgroundTransfer的主要内容,如果未能解决你的问题,请参考以下文章

应用更新上的 UWP BackgroundTask

UWP:BackgroundTask 打开应用主页

从 UWP BackgroundTask 调用 MediaCapture.InitializeAsync

Win10 BackgroundTask

backgroundtask被SocketActivityTrigger激活,但是触发器中的socket返回null

通过BackgroundTask在后台维护多路连接会话?