我正在开发一个使用后台任务的WP8.1 SL应用程序(不是代理商!)。
我的任务由TimerTrigger触发 - 每30分钟一次(我认为是Windows Phone的最小间隔,对吧?)。 它正在做很多工作,并且出于某种原因,有时它会被打断 - 也就是说,它会停在它的中间。我知道的方式就在它的中间是因为我记录了发生了什么,每次任务的工作基本相同。
我昨天将应用程序部署到我的设备上以测试一种新方法,一切都运行良好 - 后台任务在每次启动时都做了一切 - 像魅力一样工作。今天我的设备需要软复位,所以我做了(没有任何工作,它自我更新到WP8.1后不时发生)。从那一刻开始,后台任务每次都会中断,就在它的中间,就像之前的方法一样。
任何想法会导致什么? 我认为它可能与软重置有关,因为 - 之前100%成功率,之后为0%。
到目前为止我尝试过的事情:
我记录了错误,我对所有事情都进行了尝试,我已经订阅了UnobservedException事件和任务的已取消事件,而且我还是记录暂停计数 - 这些都没有帮助。似乎没有错误,它没有被暂停,也没有被取消。
我不时记录当前的内存使用情况,它大约是16-17MB。在我的设备上,限制应该是30MB,所以我不认为这是一个问题。
我尽可能地调用RequestAccessAsync。我认为曾经应该足够了,但是自从那次软重置问题以来,我决定把它放在其他1-2个地方,以检查它是否导致了这个问题。嗯,它没有,或者至少没有解决它。
我不确定的是什么:
为什么我的后台任务有时会在中间停止?我真的很难确定如何修复/改进应用程序,并且它会起作用。
感谢。
答案 0 :(得分:13)
所以,我想我发现了我的问题。
首先,后台任务只需要大量的CPU时间,超过限制,这就是它在中间被杀的原因。
有时它工作的原因是因为有时我测试的设备将应用程序视为在调试(或附加调试器)。在这种情况下,将删除对CPU时间的限制。
因此,即使我卸载应用程序并在Release中重新构建并重新部署,并在没有附加调试器的情况下启动它,设备也没有强制执行约束。只有在部署完成后,如果我已经使用调试器启动应用程序至少一次(或者可能是第一次),那就会发生这种情况。重新启动设备(只需关闭电源然后再打开)就可以解决这个问题。
在我测试时,使用相同版本的应用,其后台任务在一台设备上运行 40 MINUTES ,在另一台设备上运行仅3-4秒。重新启动第一个设备后,后台任务开始正常运行(运行几秒钟)。
因此,如果您想测试后台任务的CPU约束:
P.S。这可能不是一个完美的答案,但这些是我的观察,他们帮助我解决了我的问题。到目前为止,这是我测试CPU时间的最佳方法,而且远非完美。所以,如果有人有更好的想法,请分享。