标签:openfire thread android asmack im
最近使用Openfire和Asmack实现Android端的IM功能,但是实际使用的过程中,经常出现“java.lang.IllegalThreadStateException:Thread already started”的错误。
比如:
java.lang.IllegalThreadStateException Thread already started java.lang.Thread.checkNotStarted(Thread.java:871) java.lang.Thread.start(Thread.java:1025) org.jivesoftware.smack.PacketWriter.startup(PacketWriter.java:123) org.jivesoftware.smack.XMPPConnection.initConnection(XMPPConnection.java:684) org.jivesoftware.smack.XMPPConnection.connectUsingConfiguration(XMPPConnection.java:645) org.jivesoftware.smack.XMPPConnection.connect(XMPPConnection.java:1062) org.jivesoftware.smack.ReconnectionManager$2.run(ReconnectionManager.java:148)
“Thread already started”,顾名思义就是线程重复启动。我找到了半天都没有找到原因所在,最后在ConnectionConfiguration找到了原因。
ConnectionConfiguration里面有个参数,reconnectionAllowed,这个参数其实就是是否自动连接。使用ConnectionConfiguration.setReconnectionAllowed(boolean)来设置是否自动连接,默认重新尝试连接以防突然断开,重新连接管理将立刻连接到服务器和在尝试连接失败时增加延迟。你也可以自己调用Connection.connect()来手动连接。
问题就是,我设置了mConnectionConfiguration.setReconnectionAllowed(true),而同时我又实现了判断是否掉线,掉线则Connection.connect()。这样就悲剧地重复操作了。
解决办法也很简单,要么就是设置不自动连接,setReconnectionAllowed(false),要么就不用自己实现重连操作。
版权声明:本文为博主原创文章,未经博主允许不得转载。
使用Openfire和Asmack实现IM功能,经常出现“Thread already started”的错误
标签:openfire thread android asmack im
原文地址:http://blog.csdn.net/u014375869/article/details/46791219