我有运行新线程的服务。线程负责与服务器的开放连接
serverAddr = InetAddress.getByName(serverIP);
socket = new Socket(serverAddr, port);
然后我运行listenToServer()方法,该方法具有循环并始终从服务器读取。
scanner = new Scanner(socket.getInputStream());
message = scanner.nextLine();
while (!message.equals(null)
message = scanner.nextLine();
//...
}
根据消息,我调用了一些方法,这些方法向处理许多情况的活动发送指令,并且线程仍在监听来自服务器的新指令。
但是当互联网连接丢失(关闭Wi-Fi或服务器关闭)时,应用程序将崩溃。我怎么能处理这个错误并安全地停止&取消绑定服务并停止工作线程(从服务启动)。
答案 0 :(得分:2)
为套接字连接添加超时。
catch (SocketTimeoutException e){
if(mSocket.isConnected()){
disconnect();
}
connect();
}
如果没有任何响应,10秒钟它将抛出SocketTimeoutException并在此异常的catch中关闭连接(如果存在),然后再次连接。
select : function(event, data) {
data.node.visit(function (childNode) {
childNode.setSelected(data.node.selected);
});
答案 1 :(得分:1)
但是当互联网连接丢失(关闭Wi-Fi或服务器关闭)时,应用程序将崩溃。
不,不会。它将获得IOException。
我如何处理此错误并安全地停止&取消绑定服务并停止工作线程(从服务启动)。
这就是IOException的用途。
你的问题没有意义。
答案 2 :(得分:0)
public static boolean isNetworkAvailable(Context context ,DialogInterface.OnDismissListener dismissListener, Boolean endActivity){
ConnectivityManager conMgr = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info= conMgr.getActiveNetworkInfo();
boolean isNetworkAvailable=false;
if(info != null && info.isConnected()) {
isNetworkAvailable=true;
// Log.e("NetworkInfo","Connected State");
}
else{
isNetworkAvailable=false;
alertNetworkConnection(context,dismissListener,endActivity);
// Log.e("NetworkInfo","Not Connected state");
}
return isNetworkAvailable;
}