DefaultHttpClient挂起在lollipop中的execute()方法

时间:2015-06-22 14:45:14

标签: android android-5.0-lollipop androidhttpclient android-5.1.1-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时。前两次工作正常。

1 个答案:

答案 0 :(得分:1)

每次新的mgr实例化。