`
zhonglunshun
  • 浏览: 134828 次
  • 性别: 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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics