【问题标题】:Using background agents on Windows Phone 8.1 to save user location after device reset在 Windows Phone 8.1 上使用后台代理在设备重置后保存用户位置
【发布时间】:2015-09-30 08:13:30
【问题描述】:

所以,这就是我试图使用后台代理解决的问题:即使在设备重置后,当他在后台离线时,我也需要继续记录用户位置(用于上下文的正在运行的应用程序)。

为了尝试解决这个问题,我使用了来自this approach word-for-word 的 Periodic 任务,它在调试模式下确实有效。但是,当我整夜无人看管电话时,在离开电话半小时后,我只有一个用户日志。没有记录更多条目(请记住,我使用的是测试日志条目,而不是真正的 GPS 信号,这意味着我仅出于测试目的触发了简单的日志写入)。

我错过了什么吗?这不是解决此问题的有效方法吗?如果是这样,请您提供一个原因,因为我找不到任何说明这种限制的文档。

【问题讨论】:

  • 可以分享一下后台代理的代码吗?
  • 代码与链接示例中的完全一样,所以我没有在这里粘贴。

标签: windows-phone-8.1 background-agents


【解决方案1】:

WP 8.1 上的操作系统对后台代理何时运行以及运行时长有一些非常严格的规定。每 30 分钟一次与 MSDN 文档 here 和我的观察一致。如果您的代码编写正确,您应该大约每 30 分钟看到一个条目。如果您要为平板电脑编写商店应用程序,您将有更多选择。在那里,操作系统相对于后台代理的行为有点松懈(其中一些没有很好的记录)。由于您的目标是 Win Phone,因此我不会详细介绍平板电脑上的后台代理。

我不确定它是否适用于您的用例,但我想到的一件事是让用户保持应用程序运行。您可以防止手机进入低电量状态并暂停您的应用程序(就像导航应用程序一样)。为此,请参阅PhoneApplicationService.UserIdleDetectionMode。如果这样做,请确保将屏幕设置为黑色(或大部分为黑色)并适当地使用睡眠 (await Task.Delay(...)) 以节省电池。

【讨论】:

  • 感谢您的回答,我确实浏览了这些链接,但我的问题是重启设备后,API 调用仅在前 30 分钟后进行一次。经过 2 小时的等待,我再次启动调试器,在这行代码之后,periodicTask = ScheduledActionService.Find(periodicTaskName) as PeriodicTask 我发现了periodicTask.LastExitReason = UnhandledException
  • 我明白了。在这种情况下,你可能知道你有一个错误。您可以在战略点放置 try/catch 并将一些信息记录到文本文件中。
  • OnInvoke 方法中的所有自定义内容都已经在 try/catch 中,并按照我所说的写入日志,但重新启动后执行甚至没有到达此代码。不管怎样,谢谢你的帮助,我会继续努力的。如果我弄清楚发生了什么,我一定会在这里发布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-13
相关资源
最近更新 更多