使用后台代理更新动态磁贴

时间:2012-02-12 22:50:23

标签: c# .net windows-phone-7

我正在研究频繁更新实时图块的方法 - 例如每5分钟更新一次。

我之前使用过Push notifcations,但这次我想避免使用它们。

ShellTileShedule每小时只更新一次。

我正在考虑使用每五分钟运行一次的后台代理,并使用从服务器获取的信息更新磁贴。

除了14天到期之外,你能看到任何陷阱吗?

人们通常如何在第14天到期?

查询服务并每5分钟下载几行文字真的会杀死电池吗?

编辑:对于像这样的任务的后台代理似乎每30分钟更新一次,有没有办法解决这个问题,还是更好的解决方案?

感谢。

2 个答案:

答案 0 :(得分:1)

您在后台任务何时在手机上运行时受到一定限制。如果任务可以同时执行多个操作系统,操作系统也会移动任务的预定时间 - 以避免必须两次唤醒手机。如果您想每5分钟更新一次磁贴,那么推送通知是您唯一的选择。但是你应该考虑用户是否真的会定期查看信息。

我采用中途方法 - 我使用PeriodicTask来更新我的shell磁贴,因为操作系统允许,但是当应用程序启动时,我手动刷新具有最新信息的磁贴。这允许用户“强制”平铺数据,并在用户退出应用程序后另外提供更真实的数据。

为了解决14天的到期问题,请在每次启动应用程序时重新注册后台任务。这将继续推动14天。它旨在防止未使用的应用程序使用宝贵的资源 - 如果您的用户正在启动您的应用程序,他们可能仍希望运行后台代理。如果没有,他们可以通过设置>停用它。应用程序>后台任务(或通过卸载,显然)。要注册您的任务,请在初始化代码中执行以下操作;

  PeriodicTask task = ScheduledActionService.Find("MyTaskName") as PeriodicTask;
  if ((task != null) && (task.IsEnabled == true)) {
    ScheduledActionService.Remove("MyTaskName");
  }

  task = new PeriodicTask("MyTaskName") {
    Description = "My Periodic Task",
  };
  ScheduledActionService.Add(task);

#if DEBUG
  if (System.Diagnostics.Debugger.IsAttached == true) {
    ScheduledActionService.LaunchForTest("MyTaskName", TimeSpan.FromSeconds(10));
  }
#endif

#if DEBUG允许您在执行测试方案后直接安排任务。

答案 1 :(得分:0)

我知道这是一个非常古老的问题,但它仍然可以挽救某人的时间。根据{{​​3}}文章,每次调用Update(shellTileData)时,您的磁贴的到期时间会延长2周。据我了解,这意味着您的应用可以永久更新其磁贴,而无需重新注册任务。