我正在开发一个 WP8.1 SL 应用程序,它使用后台任务(不是代理!)。
我的任务由 TimerTrigger 触发 - 每 30 分钟一次(我相信这是 Windows Phone 的最小间隔,对吧?)。它正在做很多工作,并且由于某种原因,有时它会被中断 - 也就是说,它会在中间停止。我知道它处于中间的方式是因为我记录了正在发生的事情并且任务的工作每次基本上都是相同的。
我昨天将应用程序部署到我的设备上来测试一种新方法,一切都工作正常 - 后台任务每次启动时都会执行所有操作 - 工作得非常顺利。今天我的设备需要软重置,所以我做到了(没有任何效果,自从我更新到 WP8.1 以来,这种情况时常发生)。从那时起,后台任务每次都会在中间被中断,就像之前的方法一样。
有什么想法会导致这种情况吗?我认为它可能与软重置有关,因为 - 之前成功率为 100%,之后成功率为 0%。
到目前为止我尝试过的:
我正在记录错误,我对所有内容都有一个 try-catch,我已经订阅了 UnobservedException 事件和任务的 Canceled 事件,并且我正在记录挂起计数 - 这些都没有帮助。看起来没有错误,没有暂停,也没有取消。
我时不时地记录一下当前的内存使用情况,大约是16-17MB。在我的设备上,限制应该是 30MB,所以我认为这不是问题。
我尽可能地调用 RequestAccessAsync 。我认为一次就足够了,但由于软重置问题,我决定将其放在其他 1-2 个位置以检查它是否导致问题。好吧,事实并非如此,或者至少这没有解决问题。
我不确定的是:
- 我不知道如何检查我的任务消耗的CPU时间。我找不到好的/可靠的方法来做到这一点。另外,我找不到任何信息可以解释为什么任务有时会在中间停止,而其他时候 - 它会工作得很好。
知道为什么我的后台任务有时会停在中间吗?我真的很难确定如何修复/改进该应用程序以及它是否能正常工作。
Thanks.
所以,我想我找到了我的问题所在。
首先,后台任务需要大量的CPU时间,超过了限制,这就是它在中间被杀死的原因。
它有时起作用的原因是因为有时,我正在测试的设备将应用程序视为处于调试状态(或带有附加的调试器)。在这种情况下,对 CPU 时间的限制被取消。
因此,即使我卸载应用程序并在发布中重建它并重新部署,并在不附加调试器的情况下启动它,设备也不会强制执行约束。只有当我在部署后至少使用调试器启动应用程序一次(或者可能是第一次)时,才会发生这种情况。重新启动设备(只需关闭电源然后再打开)即可解决此问题。
当我测试时,使用相同版本的应用程序,其后台任务运行时间为40 分钟在一台设备上,而在另一台设备上只需 3-4 秒。重新启动第一台设备后,后台任务开始正常运行(仅运行几秒钟)。
因此,如果您想测试后台任务的 CPU 限制:
- 您必须在设备上进行测试,而不是在模拟器上进行测试。
- 如果已安装该应用程序,请将其卸载。
- 重新启动设备。
- 部署应用程序的发布版本。
- 运行应用程序,以便它可以注册后台任务,然后关闭它。
- 等待后台任务被调用。 (您可以添加一个可以强制的触发器,例如 TimeZoneChanged 或 UserPresent,以便您可以快速测试它。)
附:这可能不是完美的答案,但这些是我的观察,它们帮助我解决了我的问题。这是迄今为止我发现的测试 CPU 时间的最佳方法,但它远非完美。所以,如果有人有更好的想法,请分享。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)