Android의 DefaultHttpClient에 시간 초과 문제가 있습니다. 나는 다음과 같은 코드 조각으로 시간 제한을 설정하기 위해 노력하고있어 : Android가 DefaultHttpClient 시간 초과 매개 변수를 무시합니다.
HttpClient client = new DefaultHttpClient();
HttpParams httpParameters = client.getParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 4000);
HttpConnectionParams.setSoTimeout(httpParameters, 4000);
그러나 장치가 인터넷에 연결하지 않고 네트워크에 연결되어있는 경우, 타임 아웃이 발사되지 않습니다 및 HTTP 요청의 실행이 결코 모든 시간 초과가 발생하지 않습니다
예외. 다음 줄에, 나는 HttpRequest에에 시간 제한을 설정할 수도 시도했다HttpResponse httpResponse = client.execute(request);
: 나는 다음과 같이 HTTP 요청을 실행하고있어
HttpRequestBase request = ...
request.setParams(httpParameters);
안드로이드는 때 시간 제한 설정을 무시하고 것 같습니다 인터넷 연결이없는 네트워크에서 http 요청을 실행하면 약 20 초 후에 모든 요청이 실패하고 시간 초과 설정은 실패합니다.
또한 모든 인터넷 연결을 닫고 병렬 스레드로 시간 초과 후 http 요청을 중단하려고했습니다. 어떤
HttpClient client = new DefaultHttpClient();
HttpParams httpParameters = client.getParams();
HttpRequestBase request = ...
request.setParams(httpParameters);
HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutReal);
HttpConnectionParams.setSoTimeout(httpParameters, timeoutReal);
request.setParams(httpParameters);
((DefaultHttpClient) client).setParams(httpParameters);
Thread t = new Thread(){
public void run()
{
try
{
Thread.sleep(4000);
request.abort();
client.getConnectionManager().closeExpiredConnections();
client.getConnectionManager().closeIdleConnections(4000,TimeUnit.MILLISECONDS);
client.getConnectionManager().shutdown();
Log.i("TEST SHUTDOWN","SHUT DOWN ALL CONNECTIONS");
}
catch (InterruptedException e)
{
}
}
};
try
{
t.start();
HttpResponse httpResponse = client.execute(request);
}
catch (Exception e)
{
Log.i("TEST SHUTDOWN","EXCEPTION "+e);
}
finally
{
t.interrupt();
}
하지만 요청이 중단되고 연결 관리자가 종료 로그에서 볼 경우에도 요청의 실행이 중단 된/중단하지 않고 : 나는 다음과 같은 코드 조각을 사용했습니다 타임 아웃 세트로 예외가 발생합니다. 요청은 항상 20 초 후에 끝납니다.
왜 그런가?
여기 접근 방법을 시도해 보셨나요? http://stackoverflow.com/questions/11638634/android-how-to-set-a-http-connection-timeout-and-react-to-it –
예, 시도했습니다. . 그러나 문제는 항상 동일합니다. –
이상한, 이걸 재현 할 수 없습니다 ... – matiash