不使用持久化服务在后台获取 XMPP 消息

Posted

技术标签:

【中文标题】不使用持久化服务在后台获取 XMPP 消息【英文标题】:To get the XMPP message in the background without using persistent Service 【发布时间】:2014-04-29 04:34:59 【问题描述】:

我正在尝试使用 Smack 库构建 IM。我做得正确,它在前台工作正常,我可以启动一个可以在后台查找消息的 STICKY 服务。我的问题是我不希望在后台提供持久服务,因为它会消耗 android 设备的电池,相反我希望在 XMPP 消息带有一些事件时启动一些广播。

有什么方法可以实现吗?我尝试使用搜索词查找示例,但没有找到任何结果,因此在此特定上下文中我没有实现任何排序,因此没有任何相关代码。

【问题讨论】:

当您的应用程序在后台运行时,您可以在服务类中的“onTaskRemoved()”方法中调用“stopself()”方法。 【参考方案1】:

我认为这一切都取决于您要归档的内容。

如果您在 2 个客户端在线时需要快速的直接消息到达,我认为持久服务是 smack xmpp 的唯一解决方案。通过可靠的代码开发,它不应该消耗太多电池...

例如,如果您真的不关心消息是否在 2 分钟后到达,则只要应用程序正在运行,您就应该使用意图服务(连接/获取消息/断开连接)和计时器(例如每 2 分钟)。

您所描述的(当消息到来时会触发一些广播)更类似于 PUSH 机制,例如 Google Cloud Messaging...

【讨论】:

我想要消息快速,因为它将是一个聊天客户端。我已经尝试过 Smack 并且它运行良好,我可以使用服务实现它并且它运行良好但是我想要一些不应该在后台运行的东西。正如您建议使用计时器检查消息让我们说每两分钟然后有可能丢失消息以及在我们没有检查的那 2 分钟之间可能有消息..我应该怎么做那么??? 如果您真的不想让服务在后台运行,那么您应该看看 Google Cloud Messaging... 我试过了,发现它无法预测。将它用于推送通知但不用于聊天很好..我也尝试了上游消息传递(CCS)但是他们说它必须被应用并且它完全支持 Android KK 所以不能在我的情况下使用!!! 您有 2 个明确的选择:(1) 将 smack 与持久服务一起使用 (2) 使用类似 PUSH 的东西,例如 gcm、parse 等。祝您的应用好运 请记住,必须以某种方式存在持久服务才能使您的功能正常工作。通过使用 gsm,此持久服务在 google play 服务中执行,而不是在您的应用程序中执行。通过使用 Parse,您的应用程序似乎总是向用户执行(因为 parse lib 代码等待推送消息)。通过将 aSmack 与服务一起使用,您可以完全控制资源,这不是一个坏主意

以上是关于不使用持久化服务在后台获取 XMPP 消息的主要内容,如果未能解决你的问题,请参考以下文章

Android 上的 XMPP 事件

使用 XMPP 的持久组

Android上持久移动连接的最佳实践?

与 TCPServer 保持另一个持久的 TCP 连接

Android SIP 服务持久化

PHP:保持与 XMPP 聊天客户端的持久连接