2010-08-09 32 views
1

我使用ThreadSafeClientConnManager执行在Android后台线程,建立与同时请求:Android ThreadSafeClientConnManager超时?

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-路标):

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 

我需要做一些事情来显式释放后的连接要求?

回答

2

Apache的HttpClient的的使用指南,您需要确保消费上的任何汇集资源的所有内容,以保证其返回到池可用于其它线程以后 -

http://hc.apache.org/httpcomponents-core-4.0.1/tutorial/html/fundamentals.html#d0e244

如果底层库引发异常,最好放弃您尝试运行的HttpMethod,在这种情况下,连接将被终止。

+0

这帮了很多,谢谢! – 2010-08-10 18:09:15

+1

链接404,找不到! – 2012-08-19 19:44:07