C# Windows Phone 8.1后台任务在完成前关闭
我的后台任务需要很长时间才能完成,而操作系统正在扼杀它。我正在尝试在线同步我的联系人,下面是我正在做的:C# Windows Phone 8.1后台任务在完成前关闭,c#,windows-phone-8.1,windows-phone,background-task,C#,Windows Phone 8.1,Windows Phone,Background Task,我的后台任务需要很长时间才能完成,而操作系统正在扼杀它。我正在尝试在线同步我的联系人,下面是我正在做的: 从电话簿获取所有联系人(需要约1秒) 将它们上载到服务器(约2秒) 从服务器检索所有联系人(~2-3秒) 从ContactStore中删除所有联系人(ContactStore.DeleteAsync有时需要1分钟才能完成) 创建ContactStore并导入所有联系人)(1000个联系人约1-2分钟) 我有约100个联系人,工作正常,但我想用约1000个联系人进行测试,但并不是每次都能完成。
我有约100个联系人,工作正常,但我想用约1000个联系人进行测试,但并不是每次都能完成。我正在使用一个MaintenanceTrigger,但我认为它对于后台任务来说还是太多了,但我需要对此进行确认。应该允许MaintenanceTrigger任务执行更多资源密集型任务,那么为什么操作系统会终止我的后台任务?请查看以下链接: 资源密集型任务的持续时间限制为10分钟。 在启动任务之前,必须满足以下约束条件。如果设备停止满足这些约束,代理将立即终止
- 需要外部电源
- 需要非蜂窝连接
- 最小电池电量
- 需要设备屏幕锁
- 没有活动电话
- 无法将网络更改为蜂窝网络
- 所有Windows Phone 8前台应用程序的处理方式相同。对于XNA、本机或Silverlight应用程序,我们不再有不同的内存上限
- Windows Phone 8.1应用程序(包括Silverlight 8.1和Windows Runtime)的上限确实略高于Windows Phone 8应用程序
- 所有应用程序类型(包括连续后台执行(CBE))的内存上限都会随着内存的增加而增大
- 不再有“默认”和“更高”上限-只有默认上限
- 对于在Windows Phone 8.1上运行的所有应用,将忽略ID_funcap_EXTEND_MEM清单条目
- ID_REQ_MEMORY_300清单条目仍然有效,但您应该让您的应用程序在所有设备上运行
- 下面是ID_REQ_MEMORY_300的新等价物。此条目应添加到AppX清单(而不是WMAppManifest)
var result = await BackgroundExecutionManager.RequestAccessAsync();
if (result == BackgroundAccessStatus.Denied)
{
// Handle this if it is important for your app.
}
“如果结果被拒绝,手机会认为有太多的后台任务处于活动状态。在这种情况下,您可以提示用户转到节电应用程序,并强制允许您的应用程序在后台运行,即使手机不想……”最后,我的任务被取消,原因是超过了ExecutionTimes,因此这就是问题所在。似乎尝试在ContactStore中导入约1000个联系人需要约12分钟,这对于后台任务来说太长了。我必须让用户打开应用程序并进行导入。谢谢您的帮助。如果没有看到一些代码,很难回答这个问题。我想到的是,可能你的后台任务占用了太多的cpu、内存,或者需要很长时间才能完成,所以手机正在停止它。如果我使用了维护触发器,那么即使需要很长时间,任务是否应该被允许完成?手机正在充电,如果是资源密集型的,应该不会有问题task@thewindev请编辑您的问题,以明确1000个联系人不需要1-2分钟。。。但正如你后来指出的12分钟。。。你的问题会误导未来的读者。事实上,在某些情况下需要2-3分钟,在其他情况下需要12分钟。我的应用程序是针对WP 8.1的,而不是WP 8的,因此我认为内存需求增加了。无论如何,我的任务最多消耗12MB,我的设备是运行在Windows10最新版本上的Lumia930。所有这些限制都得到了满足。我忘了说有时任务完成了,有时没有。我不确定内存限制是否增加了。我找不到任何说明Windows Phone 8.1有任何更改的更新文档。@thewindev“您可以使用DeviceExtendedProperties.GetValue(字符串)检查应用程序工作设置限制值,以检查应用程序可用的内存限制。”方法。有关如何执行此操作的示例,请参阅如何禁用适用于Windows Phone 8的低内存手机的应用程序中的功能。“摘自我所做的,我使用14 MB/115 MB(限制)。我使用MemoryManager获取内存使用情况和内存限制。因此,记忆似乎不是一种记忆issue@KasperHoldum因为被接受的答案实际上在你给出的链接中得到了回答,而不是在你的帖子中。。。为了防止这可能是一个“仅链接”的答案(其余的都是模糊的),请您从链接中提取答案并编辑到您的帖子中。不傻:)但任务在不使用交流电源时不会触发,所以这不是问题所在issue@thewindev此外,这可能会为您@thewindev提供一些见解,您也可以尝试使用IBackgroundTaskRegistration对象的进度事件。。。例如在