【问题标题】:keepRunning set to false - what does it really do on Android?keepRunning 设置为 false - 它在 Android 上的真正作用是什么?
【发布时间】: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

标签: android cordova


【解决方案1】:

似乎WebSocket.java 没有处理来自 PluginManageronPause 事件,这意味着无论 keepRunning 配置设置都不会关闭套接字.

根据Phonegap / Cordova pause event triggered on resume for android; can not turn off audio as a result这个帖子,您可以将 keepRunning 设置为 true 以解决暂停事件的问题,并且不会影响当前的 WebSocket 功能。

你可能需要在你的代码中自己停止 JS 计时器,如果你使用的话。

您可以在我的帖子here

中找到有关 keepRunning 使用的一些相关信息

【讨论】:

  • 我没有使用 WebSocket 插件,因为我的应用需要 Android 4.4+ 并且此处支持开箱即用的 WS。所以这给我们留下的是:keepRunning 只影响 javascript 中的计时器,插件不受影响。如果您将 keepRunning 设置为“false”,则您的应用程序 javascript 在您重新打开应用程序之前不会收到“暂停”事件。您只能通过将 keepRunning 设置为 true 并自行停止计时器来修复它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 2020-11-14
相关资源
最近更新 更多