Smack:是不是有必要(甚至可能)明确关闭聊天?

Posted

技术标签:

【中文标题】Smack:是不是有必要(甚至可能)明确关闭聊天?【英文标题】:Smack: Is it necessary (or even possible) to explicity close a Chat?Smack:是否有必要(甚至可能)明确关闭聊天? 【发布时间】:2011-03-03 11:59:24 【问题描述】:

使用 Smack 库打开 XMPP 聊天后,是否有必要(甚至可能)显式关闭聊天?

【问题讨论】:

【参考方案1】:

您只需删除自己对它的引用,它最终会自行消失。它仅由 ChatManager 中的弱引用持有,因此最终会被 GC 处理。

如果您不想在 Chat 类等待 GC 时收到更多聊天消息,您也应该删除您的侦听器。

【讨论】:

【参考方案2】:

协议方面,你可以实现XEP-85(聊天状态通知)让对方知道你已经关闭了聊天。

<message 
    from='juliet@capulet.com/balcony'
    to='romeo@shakespeare.lit/orchard'
    type='chat'>
  <thread>act2scene2chat1</thread>
  <gone xmlns='http://jabber.org/protocol/chatstates'/>
</message>

【讨论】:

【参考方案3】:

如果您使用 SMACK API,则无需关闭聊天。当您注销或关闭连接时,它将自动关闭。

【讨论】:

【参考方案4】:

我有一个显示所有打开聊天的侧面板。它允许用户删除任何打开的聊天。如果您关闭连接,那么所有打开的聊天都会消失,而不仅仅是被删除的聊天。我也四处看看,似乎没有办法显式销毁聊天,因为垃圾收集可能需要很长时间才能收集到对象。

【讨论】:

【参考方案5】:

请关注此bug report,因为目前无法关闭聊天。 但由于这已被报告并承认它可以在下一个版本中修复。

【讨论】:

以上是关于Smack:是不是有必要(甚至可能)明确关闭聊天?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Openfire 服务器和 XMPP(SMACK)客户端的 Android 聊天应用程序 [关闭]

在smack中阻止用户[关闭]

在 android 中集成 smack

Smack 中的聊天标记 (XEP-0333)

使用 smack 的多用户聊天没有收到消息侦听器

由于 Kafka Streams 现在可用,SMACK 堆栈中是不是需要 Spark 和 Akka? [关闭]