Httpリクエストのタイムアウトとソケット接続を設定してみてください。次のリンクが表示されます:JavaでAndroidのHttpResponseタイムアウトを
設定して、それらを設定する方法を確認してください。
また、HttpRequestRetryHandlerを使用して、カスタム例外回復メカニズムを有効にします。
http://hc.apache.orgから: "デフォルトでは、HttpClientはI / O例外から自動的に回復しようとします。デフォルトの自動回復メカニズムは、安全であることがわかっているいくつかの例外に制限されています。
- HttpClientは、論理エラーまたはHTTPプロトコルエラー(HttpExceptionクラスから派生したエラー)からの回復を試みません。
- HttpClientは、べき等であると見なされるメソッドを自動的に再試行します。
- HttpClientは、HTTPリクエストがターゲットサーバーに送信されている間(つまり、リクエストがサーバーに完全に送信されていない場合)に、トランスポート例外で失敗したメソッドを自動的に再試行します。」
例:
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpRequestRetryHandler myRetryHandler = new HttpRequestRetryHandler() {
public boolean retryRequest(
IOException exception,
int executionCount,
HttpContext context) {
if (executionCount >= 5) {
// Do not retry if over max retry count
return false;
}
if (exception instanceof InterruptedIOException) {
// Timeout
return false;
}
if (exception instanceof UnknownHostException) {
// Unknown host
return false;
}
if (exception instanceof SocketTimeoutException) {
//return true to retry
return true;
}
if (exception instanceof ConnectException) {
// Connection refused
return false;
}
if (exception instanceof SSLException) {
// SSL handshake exception
return false;
}
HttpRequest request = (HttpRequest) context.getAttribute(
ExecutionContext.HTTP_REQUEST);
boolean idempotent = !(request instanceof HttpEntityEnclosingRequest);
if (idempotent) {
// Retry if the request is considered idempotent
return true;
}
return false;
}
};
httpclient.setHttpRequestRetryHandler(myRetryHandler);
詳細については、次のリンクを参照してください:
http ://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html#d4e292 。