【发布时间】:2014-11-19 19:40:42
【问题描述】:
我有一个应用程序,只要它正在运行,它就会保持与服务器的活动 WebSocket 连接,并且服务器会不断将状态更新推送到客户端。
当应用程序被发送到后台时,我希望它停止(而不是关闭)并且根据 Cordova Doc 设置“KeepRunning”为“false”应该可以解决问题。但是在应用程序发送到后台后,我仍然在监控应用程序和我的 websocket 日志中看到网络流量,因此它并没有完全停止。
所以我以为我只是在应用程序进入后台之前终止网络连接,但问题是:“pause”-Event 在应用程序回到前台后触发,就在“resume”事件触发之前。
你们是怎么处理这个问题的?这对您的情况有效吗?
【问题讨论】:
-
似乎有类似的问题stackoverflow.com/questions/20519427/… 但没有答案。我认为保持 TCP/IP 连接处于活动状态以节省电池是不好的。 AFAIK 大多数通信在 Android 应用程序中作为 HTTP 请求处理。如果您在应用程序暂停/恢复时关闭并创建新连接,我认为这将适合您的情况。我没有使用 Cordova 的经验,我只知道如何在 Android 代码中做到这一点
-
感谢您提供指向其他问题的链接。我不想让它活着!我想关闭它,但是将 keepRunning 设置为 false,在重新激活应用程序之前我不会收到“暂停”事件,所以我没有机会这样做。我认为 Cordova/Phonegap 中存在一个错误,如果“暂停”事件没有及时发送出去,至少在应用程序处于后台时网络通信也将停止。
-
那为什么不点赞我的评论呢?我还在那里发布了该问题的答案,您可能也想在那里投票))对于您的情况-您是否使用任何用于 WebSockets 的 Cordova 插件?如果是这样,那么该插件可以处理关于 keepRunning 标志的应用程序暂停事件,这取决于它的实现(除了我在那篇文章中提到的问题,当前台活动由 Cordova 应用程序本身启动时)。但我对此表示怀疑,套接字很可能在暂停状态下保持活动状态。
-
奇怪的是你的应用没有收到暂停事件,根据这篇文章stackoverflow.com/questions/26225694/… 它确实取决于 keepRunning 标志,人们能够解决类似的问题问题
-
对不起,一个更正 - 我在这里发布了一个答案:stackoverflow.com/a/27013607/1028256