Windows Phone 8.1后台任务在完成之前关闭

the*_*dev 5 c# windows-phone windows-phone-8.1 background-task

我的后台任务需要很长时间才能完成,操作系统正在扼杀它.我正在尝试在线同步我的联系人,这是我正在做的事情:

  1. 从电话簿获取所有联系人(需要约1秒)

  2. 将它们上传到服务器(约2秒)

  3. 从服务器检索所有联系人(~2-3秒)

  4. 从ContactStore中删除所有联系人(ContactStore.DeleteAsync有时需要1分钟才能完成)

  5. 创建一个ContactStore并导入所有联系人)(1000个联系人约1-2分钟)

我有~100个联系人并且它运行良好,但我想测试~1000个联系人,并且每次都没有完成.我正在使用MaintenanceTrigger,但我认为它对于后台任务来说仍然太多了,但我需要对此进行确认.应该允许MaintenanceTrigger任务执行更多资源密集型任务,那么为什么操作系统会终止我的后台任务呢?

Kas*_*dum 3

看一下这个链接:https://msdn.microsoft.com/en-us/library/windows/apps/hh202942 (v=vs.105).aspx

资源密集型任务的持续时间限制为 10 分钟。

在任务开始之前必须满足以下约束。如果设备停止满足这些约束,代理将立即终止。

  • 需要外部电源
  • 需要非蜂窝连接
  • 最低电池电量
  • 需要设备屏幕锁定
  • 没有正在进行的电话通话
  • 无法将网络更改为蜂窝网络

除此之外,低端/高端设备的内存上限分别为 11mb 和 20mb。

根据您上面的描述,IMO 最有可能的情况是内存上限受到影响。也许这篇文章可以帮助您了解后台任务的内存使用情况:如何在 C# 中获取可用或已使用的内存

从 Windows Phone 8.1 开始,内存限制的主要变化包括(可在此处找到):

  • 所有 Windows Phone 8 前台应用程序的处理方式相同。我们不再对 XNA、本机或 Silverlight 应用程序设置不同的内存上限。
  • Windows Phone 8.1 应用程序(包括 Silverlight 8.1 和 Windows Runtime)应用程序的上限确实比 Windows Phone 8 应用程序稍高。
  • 所有应用程序类型的内存上限(包括连续后台执行 (CBE))会随着内存的增加而扩展。
  • 不再有“默认”和“更高”上限 - 只有默认上限。
  • 对于在 Windows Phone 8.1 上运行的所有应用程序,将忽略 ID_FUNCCAP_EXTEND_MEM 清单条目。
  • ID_REQ_MEMORY_300 清单条目仍然有效,但您确实应该让您的应用程序在所有设备上运行。
  • ID_REQ_MEMORY_300 的新等效项如下。应将此条目添加到 AppX 清单(而不是 WMAppManifest)。