UWP 应用更新后的后台任务

3

我有一个简短的问题,如果我更新了包含BackgroundTask的应用程序,我是否需要在更新后注销和重新注册任务?我曾经遇到这样的情况,即在某些用户的设备上更新后,BackgroundTask不再起作用,用户不得不再次禁用和启用它。我在msdn文档中看到了一个名为"ServicingComplete"的BackgroundTask,在应用程序更新后应该被启动,所以把主要的BackgroundTask重新注册在那里是正确的方法吗?还是有更好的方法来确保简单的BackgroundTask在应用程序更新后能够100%正常工作?


你如何注册后台任务?用户在什么情况下会在你的应用中注册后台任务?或者你的后台任务需要在应用安装后始终注册。 - Sunteen Wu
我在我的应用程序中手动使用按钮注册后台任务。但是当我提交应用程序更新后,某些用户设备上的后台任务就不再起作用了,因为一旦安装了应用程序更新。在单击按钮以在应用程序内注册BackgroundTask后,BackgroundTask再次工作。但这仅适用于少数设备。因此我的问题是如何处理这个问题? - andy
1个回答

6
答案是肯定的。如果你的应用程序已经更新,你需要:
  • 注销后台任务
  • 调用BackgroundExecutionManager.RemoveAccess();
  • 调用BackgroundExecutionManager.RequestAccessAsync();
  • 重新注册你的任务
在我的自己的应用程序中,我将最新的版本号保存在本地设置中,以便可以检测到这一点。

好的,但是这个任务是否可以从ServicingComplete任务中完成,还是需要在应用程序启动时重新注册它?每次都需要调用RemoveAccess()吗? - andy
好的,我明白了。但我的问题是,即使在应用更新后,后台任务也应该能够正常工作,而不需要启动应用程序重新注册后台任务。 - andy
我查看了ServicingComplete BackgroundTask,但是我没有找到任何关于如何正确重新注册BackgroundTasks的真实示例。就像你说的,RemoveAccess()和RequestAccessAsync()是必需的,我认为RequestAccessAsync()只能从前台应用程序(UI)调用? - andy
1
在Win 8/8.1中这是必要的。但在Win10中已经不再需要了。 - Petter Hesselberg
1
现在它已经在ServicingComplete BackgroundTask中工作了,事实证明,缺少的是BackgroundExecutionManager.RemoveAccess()。非常感谢您的帮助! - andy
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接