虽然附加到调试器,它运行得很好。调用Periodic Task并反复运行,但是当我将它部署到我的设备时它似乎运行1-2次然后停止。
它的作用是从隔离存储设置实时图块背景图像。图像在应用程序中创建,然后保存到隔离存储中。如上所述,它在连接到调试器时运行良好。
可能会破坏它的唯一constraint I could think将是内存上限。该应用程序创建并保存40个图像,每个图像约25kB,并且不超过1 MB!应用程序可能<4 MB,因此是5 MB ...比11 MB的最低要求少很多。
所以它不能成为内存上限。连续两次未处理的崩溃也应该会破坏任务,但我已经将任务代码中的所有代码抛出了OnInvoke()
一个尝试/捕获。
现在,我没有想法在没有连接到在调试器中运行的visual studio的情况下运行时停止我的周期性任务。有线索吗?
答案 0 :(得分:4)
首先你是否有机会使用Windows 8.1手机?由于周期性任务存在问题,因此您无法在Windows Phone 8.1设备上运行,因为您可以在forum上看到
后台代理不能使用超过6MB的内存。您可以使用以下代码段获取当前内存使用情况:
var memory = DeviceStatus.ApplicationMemoryUsageLimit
- DeviceStatus.ApplicationCurrentMemoryUsage;
每30分钟由操作系统自动执行
每次运行的操作不能超过25秒
如果手机切换到节电模式,后台代理可能无法执行
在某些设备上,只能同时规划6个后台代理
代理商不能使用更多的6MB内存
代理商必须每2周重新计划一次
系统自动禁用崩溃两次的代理
答案 1 :(得分:1)
连续两次崩溃后,定期任务未经调度。您需要确保不会发生这种情况(如果需要,请检查互联网连接,在Web请求上设置超时等)。
您应该将代码放在try / catch块中,并在Isolated Storage中记录异常以查看之后发生的事情。
以下是适用于预定代理(MSDN)的约束列表:Constraints for all Scheduled Task Types
以下是一系列可以帮助您的博客文章:Windows Phone: Background Agents Pitfalls
答案 2 :(得分:1)
您是否实际测量并记录了正在使用的内存?你所说的并不正确:
您可以尝试两件事:
使用此属性并检查峰值内存使用情况:DeviceStatus.ApplicationPeakMemoryUsage。将它写入某个文件(可能每5张图片左右)并检查它是否正常。请粘贴结果。
注意:在测试内存使用情况时,最好在&#34;发布&#34;中构建应用程序。并在设备上无需调试即可运行它。这是最准确的。有一些细微的变化,因此您应该多次运行代理以确保它在限制范围内工作。您可以使用ScheduledActionService.LaunchForTest强制从应用启动它。
此外,我建议您订阅Application.Current.UnhandledException事件并将所有异常标记为已处理(并记录它们,以便您可以修复它们)。这样可以提高安全性。
P.S。当后台代理停止执行时,它是否被阻止&#34;在设备上的后台任务列表中?