1.網上關於網絡斷線這個問題的處理的資料確實很少。有寫說在Mina的框架里修改Session close.但都沒有給出相關的處理。對於一個不是深入了解那框架的人,確實是件不容易的事情。
2.下面給出一個自己的處理方案.
就是利用Connection的ConnectionListener.
下面是具體寫法
mConnection.addConnectionListener(new ConnectionListener() {
//當網絡斷線了,重新連接上服務器觸發的事件
@Override
public void reconnectionSuccessful() {
// TODO Auto-generated method stub
System.out.println("reconnectionSuccessful");
}
//重新連接失敗
@Override
public void reconnectionFailed(Exception arg0) {
// TODO Auto-generated method stub
System.out.println("reconnectionFailed");
}
//重新連接的動作正在進行的動作,里面的參數arg0是一個倒計時的數字,如果連接失敗的次數增多,數字會越來越大,開始的時候是14
@Override
public void reconnectingIn(int arg0) {
System.out.println("time: "+arg0);
// TODO Auto-generated method stub
System.out.println("reconnectingIn");
}
//這里就是網絡不正常斷線激發的事件
@Override
public void connectionClosedOnError(Exception arg0) {
// TODO Auto-generated method stub
System.out.println("connectionClosedOnError");
}
//這里是正常關閉連接的事件
@Override
public void connectionClosed() {
// TODO Auto-generated method stub
System.out.println("connectionClosed");
}
});
不是像上面那樣,add了一個Listener搞定了,你要觸發這個listener就要在你想判斷聯網是否正常的時候,使用一下XMPPConnection.isConnected()這個方法。
他就會自動檢測這個Connection並且處理Listener里面的事件
可以寫一個線程來專門檢測比如:
new Thread(){
public void run() {
while(true){
try {
sleep(3*1000);
System.out.println("thread info con: "+mConnection.isConnected());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();
這就是3秒檢測一下,就不用去修改Openfire了,Connection默認的情況下是會自動連接上去的。
