我的应用程序连接到服务器,当我退出应用程序时,我必须从服务器注销。
我的问题是响应延迟:我的应用程序没有快速退出,我必须等待服务器的响应才能离开Handler。
响应并不重要,我确信如果我发送了get,它将会退出。
那么,是否可以退出(通过http获取)并关闭我的应用而无需等待响应(但不停止“获取流程”)?
正如我在浏览器的计算机上所做的那样:我点击退出按钮,然后关闭浏览器,而不是等待来自服务器的欢迎页面......
我尝试过添加一个短的套接字超时,但是服务器没有注销。
这是我的方法:
private void Disconnect() {
new Thread() {
@Override
public void run() {
String errorMessage = null;
Message msg = authHandler.obtainMessage();
try {
HttpGet httpGet = new HttpGet(LogoutURL);
HttpResponse httpResponse = httpclient.execute(httpGet);
if (httpResponse.getStatusLine().getStatusCode() != 200) {
msg.what = AuthERR;
authHandler.sendMessage(msg);
return;
}
msg.what = AuthEND;
msg.obj = choix;
authHandler.sendMessage(msg);
} catch (ClientProtocolException e) {
errorMessage = e.toString();
} catch (IllegalArgumentException e) {
errorMessage = e.toString();
} catch (IOException e) {
errorMessage = e.toString();
} catch (Exception e) {
errorMessage = e.toString();
} finally {
if (errorMessage != null) {
Log.e("Logout", errorMessage);
msg.what = AuthUnknownHostException;
msg.obj = errorMessage;
authHandler.sendMessage(msg);
}
}
}
}.start();
}
答案 0 :(得分:2)
HTTP是半双工请求 - 响应协议。在得到响应之前,您没有证据表明请求已发送到服务器。由于网络问题,它可能会丢失。
答案 1 :(得分:2)
如果您立即退出应用程序,您如何知道服务器已收到注销请求?我建议立即更改服务器发送响应,然后在后台完成注销,这样您的客户端就会有快速响应。
答案 2 :(得分:0)
如果库没有提供放弃连接的方法,您只需退出。
Thread logoutThread = new LogoutThread();
logoutThread().start();
logoutThread.join(1000);
System.exit(0);
假设,根据经验,在大多数情况下,1秒足够好。当然,存在不向服务器提供注销请求的风险,但在网络应用程序中始终存在这种风险。