欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

asmack断线重连实现 博客分类: xmppandroid xmpp断线重连asmack 

程序员文章站 2024-03-24 22:44:04
...

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

 

 

 

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