`
zhonglunshun
  • 浏览: 138972 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

asmack断线重连实现

阅读更多

在以前的asmack版本中,断线重连是需要我们自己做的,原理很简单,分两种情况,一种是断网了,另外一种就是掉线了。

 

1.没有网络的情况下。

没有网络的情况下,如果想要在所有页面提示用户开启网络,一个一个页面写会很麻烦,其实我们可以写一个baseActivity,在这个里面做断网相关操作,其他的activity集成了这个类,那么就能在整个应用程序中弹出对话框,要想实现全局的对话框,使用这种方法挺好的。

 

无网络的监听主要是监听安卓系统的一个广播,叫做android.net.conn.CONNECTIVITY_CHANGE;具体逻辑如下:

 

*----1)在baseActivity监听系统网络改变广播:android.net.conn.CONNECTIVITY_CHANGE;  

*----2)收到断网广播以后,显示无网络(Contactfragment),并提示用户打开网络(BaseActivity)。

*----3)收到网络恢复广播以后,去掉无网提示(ContactFragment)。

*

 

 

*2.有网络但是没有xmpp连接的情况下。

我们有两种处理方法,第一种就是自己写一个断线重连机制,配合闹钟使用,因为现在asmack提供了自己的断线重连,所以主要讲第二种,第二种是在初始化xmppConnection的时候,设置reconnection为true;

如下:

ConnectionConfiguration connConfig = new ConnectionConfiguration(
				kimHost, PubConstant.XMPP_PORT);
		connConfig.setReconnectionAllowed(true);

 asmack的这套机制做了很多相关的处理,比如网络恢复后继续连接服务器,这样生了很多烦恼;

*----1)登录的时候注册IMConnectionListener,当网络发生改变,调用了connectionClosed或者connectionClosedOnError的时候,如果不是登陆冲突,则发送重连广播。

*----2)当调用了reconnectionFailed的时候,首先检测是不是没网络,是的话直接返回。

*----3)网络恢复,发送网络恢复广播通知ContactFragment去掉连接异常提示。

 

 

最新的asmack的jar已经帮我们实现了断线重连,内部就有一套机制对断线做了相关的处理。使用起来很简单,但是这个有一个不好的地方就是,当重连上了以后,可能只能发出消息,不能收到消息。因此,我们需要在重连成功之后,在添加一下Listener。

 

添加listener包括单聊和群聊的都要添加(如果有群聊功能的话),否则会导致收不到消息或者发送不出去消息;其实我做完之后发现,这个和重新登录一遍没啥两样了,但是至少效果是有了的。

 

 

 

本文系原创,还请装载的朋友注明原处,尊重作者劳动成果;

0
1
分享到:
评论

相关推荐

    MyXmpp(asmack) for Android

    合理的连接心跳机制和断线重连策略也是提高用户体验的关键。 在实际开发中,你需要阅读asmack的文档,理解其API用法,并结合Openfire的服务器配置,才能将MyXmpp项目搭建起来。同时,对Android的生命周期管理和网络...

    android应用源码(精)基于asmack开发的Android IM客户端源码

    源码中应包含连接XMPP服务器的逻辑,包括登录验证、心跳保活、断线重连等机制。 5. **UI设计**:源码可能包含多个布局文件,用于创建用户界面,如登录界面、联系人列表、聊天窗口等。这些界面通常使用XML布局文件...

    asmack-android源码及对应jar包

    - **会话管理**:保持与服务器的持久连接,处理断线重连。 - **实体发现**:获取服务器和用户的信息,如资源、能力等。 - **消息传递**:实现一对一、一对多的消息发送与接收。 - **群组聊天**:支持多用户聊天室的...

    asmack.rar源代码

    这部分代码涉及了TCP/IP连接的建立、心跳维持、断线重连策略等。 2. **XML解析与生成**:由于XMPP协议基于XML,因此源代码中会有解析XML数据流并生成XML消息的部分,可能使用了如StAX或DOM等XML处理库。 3. **实体...

    asmack 的源码

    - 关注连接状态,处理断线重连。 **6. 性能优化与最佳实践** - 使用异步处理机制,避免阻塞 UI 线程。 - 合理管理资源,如及时关闭连接,避免内存泄漏。 - 使用连接池,减少重复连接带来的开销。 - 保持代码简洁,...

    应用源码(精)基于asmack开发的开源IM客户端.zip

    6. 断线重连:在网络不稳定时自动尝试重新连接。 通过研究这个开源项目的源码,开发者可以学习到如何在Android应用中集成ASMACK,理解XMPP协议的工作原理,以及如何处理Android特有的多线程和内存管理问题。此外,...

    AdXmpp(Openfire+asmack+spark) Android 源码 .zip

    5. **实时通信架构**:理解客户端-服务器通信模型,包括连接管理、心跳机制、断线重连策略。 6. **安全性**:如何实现安全的XMPP连接,如SSL/TLS加密,以及防止中间人攻击。 7. **性能优化**:针对Android平台进行...

    Android应用源码之AdXmpp(Openfire+asmack+spark).zip

    1. **连接管理**:使用Asmack库建立与Openfire服务器的连接,包括登录、心跳保持、断线重连机制。 2. **会话管理**:创建和管理XMPP会话,包括发送和接收消息,以及处理各种XMPP stanza(消息、IQ、presence)。 3. ...

    安卓Android源码——AdXmpp(Openfire+asmack+spark).zip

    开发者通常会创建一个XMPP连接管理类,负责初始化连接、处理断线重连、心跳保持等核心任务。此外,还需要实现XMPP事件监听器,以处理各种事件,如新消息到达、用户上线/离线通知等。 为了提高用户体验,AdXmpp可能...

    Android平台的即时通信系统的API

    ASMACK提供了自动重连机制,但开发者也需要在应用层面上设计合适的重试策略。 综上所述,Android平台上的即时通讯系统开发涉及多个层面,包括Android基础知识、XMPP协议理解、ASMACK和Smack库的使用,以及性能和...

    简易im gtalk聊天工具源码

    在实际开发过程中,你可能还会遇到一些常见的问题,如网络连接不稳定导致的断线重连、安全性问题(如使用SSL/TLS加密通信)以及性能优化等。对于这些问题,Asmack库通常都有相应的解决方案和最佳实践可供参考。 总...

    asmask jar包和source

    2. **会话管理**:一旦连接建立,ASMACK可以帮助维持会话,处理心跳包以防止连接超时,并支持断线重连。 3. **实体管理**:ASMACK支持创建、修改和删除XMPP实体,如用户、群组和多用户聊天室(MUCs)。 4. **消息...

    Smack帮助文档中文版

    1. **连接管理**:Smack提供连接到XMPP服务器的接口,包括建立连接、保持心跳、处理断线重连等功能。通过`XMPPTCPConnection`类,开发者可以创建和管理与服务器的连接。 2. **实体与JID**:在XMPP中,每个用户、...

    Android应用源码基于XMPP的即时聊天项目.rar

    BroadcastReceiver可能用来监听网络变化,以便在断线后自动重连。 在实现聊天功能时,开发者通常会用到XMPP的几个核心概念,如JID( Jabber ID,用户的唯一标识)、Roster(联系人列表)、Presence(在线状态)和...

    androidpn-消息推送文档宣贯.pdf

    - 手机状态监听:PersistentConnetcionListener、PhoneStateChangeListener和ReconnectionThread监控手机状态,确保断线后能自动重连。 3. 服务器组件: - 异常定义:org.androidpn.server.xmpp包含异常类,如...

    androidpn消息推送完善版,基于web服务器

    PersistentConnectionListener、PhoneStateChangeListener以及ReconnectionThread三个类共同监测手机状态的变化,并在断线时触发重连机制,确保客户端与服务端的连接稳定。 #### 四、服务器设计 服务器部分的设计...

    XMPP_app:这是使用 XMPP 协议处理客户端和服务器之间通信的 android 应用程序

    考虑到移动设备的网络环境可能不稳定,此部分还需要处理断线重连的情况。 2. **身份验证**:应用需要提供用户登录功能,通过用户名和密码进行身份验证,或者支持OAuth、OpenID等其他认证方式。 3. **消息系统**:...

Global site tag (gtag.js) - Google Analytics