【问题标题】:Updating Live tile using background agent使用后台代理更新动态磁贴
【发布时间】:2015-10-18 01:31:56
【问题描述】:

我正在研究经常更新动态磁贴的方法 - 例如每 5 分钟一次。

我以前使用过推送通知,但这次我想避免它们。

ShellTileShedule 每小时只更新一次。

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

除了 14 天到期之外,您能看出这方面的任何缺陷吗?

人们通常如何度过 14 天的有效期?

每 5 分钟查询一项服务并下载几行文本真的会耗尽电量吗?

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

谢谢。

【问题讨论】:

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


    【解决方案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 允许您在执行测试场景后立即安排任务。

    【讨论】:

      【解决方案2】:

      我知道这是一个非常古老的问题,但它仍然可以节省一些人的时间。根据this 文章,每次您调用 Update(shellTileData) 您的磁贴的过期时间都会延长 2 周以上。据我了解,这意味着您的应用可以永远更新其磁贴,而无需重新注册任务。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多