【问题标题】:Android Smack Xmpp connection handling best practicesAndroid Smack Xmpp 连接处理最佳实践
【发布时间】:2016-02-26 14:01:18
【问题描述】:

我一直在为 chat 应用程序使用 Smack XMPP android 库。

我目前的聊天架构是,我使用 XMPP 来发送 messages 到客户端只有当应用程序在 Foreground 否则使用 GCM。服务器已经处理好了。

由于 android 没有方法来简单地指示应用程序当前在 FG 或 BG 中的位置,我发现很难连接和断开 XMPP 。因此,当应用程序有多个活动时,我在每个活动 onPauseonResume 上实现了使用计时器。这是非常痛苦的,还有很多工作要做。

例如,我有两个活动,A 和 B。在 AonResume() 中连接 XMPP。从 切换ABonPause() 将在 A 上触发并在 3sec.Within 3sec 后断开 XMPP 连接,onResume B 的 () 将触发并停止计时器,以便连接处于活动状态。 :-)

onPause()

if (Application.getInstance().xmppStatus == XMPPSTATUS.CONNECTED) {
     Application.getInstance().disconnectXmpp(); //disconnect xmpp after 3sec
}

onResume()

if (Application.getInstance().xmppStatus == XMPPSTATUS.DISCONNECTED) {
     LoginHelper.connectXmpp();//connect XMPP 
}

我相信你们中的大多数人都陷入了这种问题,尤其是在聊天中,所以我很高兴听到你在这方面的经验。

【问题讨论】:

    标签: android service connection xmpp smack


    【解决方案1】:

    你不应该手动断开客户端,当客户端与服务器断开连接时切换到gcm,当客户端再次连接时切换回xmpp,所有逻辑都应该在服务器端

    【讨论】:

    • 首先服务器不是由我维护的。其次,shd 服务器如何知道客户端是否断开连接?现在有新的通知要发送,服务器检查客户端是离线(断开 XMPP)还是在线(XMPP 连接)。该服务器上的基础将使用 GCM 进行离线,否则使用 XMPP
    • 服务器“知道”每个连接的客户端,你应该在每次与服务器断开连接时触发切换到 gcm,即使不清楚(不发送“断开连接”状态),只是因为用户可能会在随时
    • 感谢@vitalyster 的回答。话虽如此,当 shd 我从客户端切换到 GCM 时?
    【解决方案2】:

    最好的方法是你应该使用片段而不是活动。如果您使用片段,那么您将只有 1 个活动,并且您的 onPause() 和 onResume() 处理将非常容易。试一试……片段比活动更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多