DefaultHttpClient 挂在棒棒糖中的 execute() 方法上
DefaultHttpClient hangs on execute() method in lollipop
在我们的一个旧项目中,我们将 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 时才会发生。前两次它工作正常。
每次有新的管理器时实例化
在我们的一个旧项目中,我们将 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 时才会发生。前两次它工作正常。
每次有新的管理器时实例化