gpt4 book ai didi

android - 如何在 Android 中创建与 XMPP 服务器保持 Xmpp 连接的服务?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:54:42 24 4
gpt4 key购买 nike

在 Internet 上进行大量搜索后,我们得出一个结论,为了确保与 XMPP 服务器的持久 连接,我们必须创建一项服务,

我们已经创建了一个使用 Smack 库连接到 XMPP 服务器的,它在移动和 wi-fi 网络上运行良好。

每次你做一些设计方法总是很重要!!!,Smack 已经在监听连接的库中隐式实现了这种重新连接机制,如果连接断开,Smack 会尝试重新连接 XMPP 服务器一些时间间隔。

我们的用例场景::
互联网连接可能是因为 wifi 或数据网络,这里如果连接进入空闲状态有人关闭屏幕 cpu 进入休眠状态现在任何数据都发送到此连接上的服务器将没有响应因为服务器不再监听客户端,在客户端 XMPP 连接已经处于连接模式连接监听器未检测到与服务器的任何断开连接,因此此处流程完成。

在 INTERNET 上搜索后,我们发现解决此问题的可能解决方案是在修复后 ping 服务器(我们使用 1 分钟作为修复周期),在检测到 ping 失败后,我们实现了与 smack 相同的重新连接机制(想法来自Smack 重新连接机制本身)通过使用定时器任务。

问题::我们唯一的问题是电池耗尽,如果用户仍然连接到 INTERNET 并且重新连接间隔增加,它会耗尽电池。

1).上述问题的可能解决方案是什么?

2).我们是否必须采取另一种方法?

最佳答案

How To Create Service In Android Which Makes Persist Xmpp Connection With XMPP Server?

两件事

  1. 通过监听 CONNECTIVITY_CHANGED Intent 重新建立连接并确定当前使用的数据连接是否断开(并被另一个连接取代)。
  2. 确保通过 ping 服务器建立连接

备注关于

  1. 仅监听 CONNECTIVY_CHANGED 是不够的,您需要将以前 Activity 的连接与现在 Activity 的连接进行比较。如果不一样,请重新建立 XMPP 连接。
  2. Smack 4.1 附带 ServerPingWithAlarmManager ,它将根据 PingManager 的设置每 30 分钟检查是否需要 ping。此值是硬编码的,无法更改。

使用 1 分钟作为 Ping 间隔太长了!正如您所经历的,它会很快耗尽您的电池电量。合理的 ping 间隔应该大于 15 分钟,我建议 30 分钟。 Smack 4.1 还将确保只有在 Ping 间隔内没有收到节时才发送 ping。

尽可能使用 XEP-0198:流管理。

我建议查看遵循这些指南的各种开源应用程序,并在不耗尽用户电池的情况下实现稳定、永久的连接1

1:仅遵循这些建议并不能保证电池电量一定会耗尽。还有更多因素需要考虑。

关于android - 如何在 Android 中创建与 XMPP 服务器保持 Xmpp 连接的服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26082731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com