Я использую ThreadSafeClientConnManager для выполнения одновременных запросов в фоновом режиме на Android, настроенных с помощью
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);
HttpProtocolParams.setUseExpectContinue(params, true);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
ClientConnectionManager connman = new ThreadSafeClientConnManager(params, registry);
client = new DefaultHttpClient(connman, params);
И выполнение запросов с (обратите внимание, что я использую outh-signpost):
HttpGet request = new HttpGet("https://" + API_HOST + "/" + API_VERSION + path);
OAuthConsumer consumer = new CommonsHttpOAuthConsumer(key, secret);
consumer.sign(request);
HttpResponse response = client.execute(request);
Проблема в том, что через некоторое время я начинаю получать
java.net.SocketException: The operation timed out
Нужно ли мне что-то делать, чтобы явно освободить соединение после запроса?
Из руководства по использованию apache httpclient вам необходимо убедиться, что вы потребляете весь контент на любом объединенном ресурсе, чтобы гарантировать, что он вернется в пул, который будет доступен для других потоков позже -
http://hc.apache.org/httpcomponents-core-4.0.1/tutorial/html/fundamentals.html#d0e244
Если возникает исключение, созданное базовой библиотекой, лучше прекратить HttpMethod, который вы пытались запустить, и в этом случае соединение будет прекращено.