【问题标题】:Windows Phone 8.1 : UDP packets stop being transmitted when phone app is in backgroundWindows Phone 8.1:当手机应用程序处于后台时,UDP 数据包停止传输
【发布时间】:2014-09-09 18:07:07
【问题描述】:

背景信息

我下载了适用于 Windows Phone 8.1 (C++) 的线程池示例并对其进行了修改,以便定期计时器定期向远程 IP 发送 UDP 数据包。

问题

我注意到以下几点:

  1. 从 MSVS 2013 启动应用程序时,无论您在手机上做什么,都会定期发送 UDP 数据包

  2. 当应用程序处于后台时,从手机的程序列表启动应用程序时,UDP 数据包将停止发送。

问题

如何在 Windows Phone 8.1 上创建每 10 秒运行一次的周期性任务?无论用户在电话上做什么,周期性任务都必须向预定义的 IP:PORT 地址发送 UDP 数据包。

我看过这个:

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977059.aspx

但我看不到让定时任务每 10 秒运行一次的可能性。

如何重现问题

Link To Test Project

测试项目包含有关如何重现我所描述的问题的说明。

【问题讨论】:

  • 有(至少曾经是)“在锁定屏幕下运行”的功能,它有效地退出了正常的应用程序生命周期 - 用户收到关于安装时电池耗尽的大量警告 - 我已经看到至少有一个支持这个的 SSH 客户端,但是我现在找不到了……

标签: windows-phone


【解决方案1】:

很遗憾,您所追求的东西在 Windows Phone 上是不可能的。一旦应用程序在手机上不再处于活动状态,它就会被删除并且不再运行。

您可以使用Background Agents 实现类似的功能,但它们的功能受到限制,并且它们仅每 30 分钟运行一次。

还有其他后台代理可以响应不同的电话事件,包括位置变化、网络可用性变化和地理围栏触发器。

有一个稍微老套的方法可以强制执行后台任务,那就是模拟audio player task。虽然这不是一个很好的解决方案。

【讨论】:

  • 所以对于在后台运行的应用程序来说,音频或网络流的实时处理是不可能的?它将无法通过 UDP 或 TCP 响应入站信号?
  • @user1884325 我用一些关于模拟音频播放器任务的信息更新了答案
  • 谢谢。因此,通过模拟音频播放器任务,您可以在应用程序处于后台时运行定期任务。是的,这听起来确实像一个黑客。我已经看到 VoIP 应用程序能够在应用程序处于后台或在 WP8.1 上关闭显示时接收入站呼叫。我怀疑这些情况下的诀窍是模拟音频播放器任务吗?微软将这些限制强加给开发者和他们的应用程序是非常愚蠢的。
  • @Mac :我已经接受了你的回答,但我想要更多关于可能解决方案的建议。这个问题必须以“非骇客”的方式解决。
  • 没有解决方案。微软有意阻止应用程序在后台运行,这样 Windows Phone 就不会受到 android 的“流氓应用程序”问题的困扰。这是平台的设计决策。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
相关资源
最近更新 更多