【发布时间】:2015-06-22 14:45:13
【问题描述】:
在我们的一个旧项目中,我们将DefaultHttpClient 用于networking。它在lollipop 设备下工作正常,但在lollipop 获取请求挂起execute 方法调用。
我们正在像这样创建HttpClient。
public static MyHttpClient createHttpClient(Context ctx) {
try {
if(mgr == null){
SSLSocketFactory sf = SSLSocketFactory.getSocketFactory();
sf.setHostnameVerifier(SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
httpParameters = new BasicHttpParams();
HttpProtocolParams.setVersion(httpParameters, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(httpParameters, HTTP.UTF_8);
HttpConnectionParams.setConnectionTimeout(httpParameters, HOST_REACH_TIMEOUT);
HttpConnectionParams.setSoTimeout(httpParameters, HOST_REACH_TIMEOUT);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", sf, 443));
mgr = new ThreadSafeClientConnManager(httpParameters, registry);
}
return new MyHttpClient(mgr, httpParameters);
} catch (Exception e) {
return new MyHttpClient(ctx);
}
}
我们还设置了超时。知道为什么它在那里冻结以及我们如何解决这个问题吗?
编辑:我错过的另一件事。只有当我们第三次点击相同的 URL 时才会发生这种情况。前两次效果很好。
【问题讨论】:
-
HOST_REACH_TIMEOUT的值是多少 -
@petey 我已将 HOST_REACH_TIMEOUT 替换为值。
-
2min 挺高的,试试 15000?
-
我已经尝试了 1 分钟的相同结果。我还错过了另一件事。只有当我们第三次点击相同的 URL 时才会发生这种情况。前两次效果很好。
-
只是一个想法。连接完成后你会打电话给
releaseConnection()吗?
标签: android android-5.0-lollipop androidhttpclient android-5.1.1-lollipop