我的周期性任务不起作用

时间:2014-05-27 06:49:19

标签: windows-phone-8 background-process

虽然附加到调试器,它运行得很好。调用Periodic Task并反复运行,但是当我将它部署到我的设备时它似乎运行1-2次然后停止。

它的作用是从隔离存储设置实时图块背景图像。图像在应用程序中创建,然后保存到隔离存储中。如上所述,它在连接到调试器时运行良好。

可能会破坏它的唯一constraint I could think将是内存上限。该应用程序创建并保存40个图像,每个图像约25kB,并且不超过1 MB!应用程序可能<4 MB,因此是5 MB ...比11 MB的最低要求少很多。

所以它不能成为内存上限。连续两次未处理的崩溃也应该会破坏任务,但我已经将任务代码中的所有代码抛出了OnInvoke()一个尝试/捕获。

现在,我没有想法在没有连接到在调试器中运行的visual studio的情况下运行时停止我的周期性任务。有线索吗?

3 个答案:

答案 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)

您是否实际测量并记录了正在使用的内存?你所说的并不正确:

  1. 当后台代理启动时,已经花了5-6MB来从.NET框架加载它所需的内容。
  2. 如果你的意思是每个压缩文件是25KB,你应该知道内存中的图像没有被压缩(至少没有那么多)。
  3. 您可以尝试两件事:

    1. 使用此属性并检查峰值内存使用情况:DeviceStatus.ApplicationPeakMemoryUsage。将它写入某个文件(可能每5张图片左右)并检查它是否正常。请粘贴结果。

      注意:在测试内存使用情况时,最好在&#34;发布&#34;中构建应用程序。并在设备上无需调试即可运行它。这是最准确的。有一些细微的变化,因此您应该多次运行代理以确保它在限制范围内工作。您可以使用ScheduledActionService.LaunchForTest强制从应用启动它。

    2. 此外,我建议您订阅Application.Current.UnhandledException事件并将所有异常标记为已处理(并记录它们,以便您可以修复它们)。这样可以提高安全性。

    3. P.S。当后台代理停止执行时,它是否被阻止&#34;在设备上的后台任务列表中?