第二个HttpUrlConnection挂在真实设备上

时间:2013-04-18 13:08:07

标签: android httpurlconnection

我在我的longpolling库basic-http-client中使用SignalA。 basic-http-client基于HttpUrlConnection。在模拟器中运行时,可以打开一个长运行后请求并同时执行另一个请求。 在真实设备上运行我的代码时,第二个POST将挂起,直到第一个完成。它挂在getResponseCode函数上。

在模拟器或真实设备上运行之间的区别是什么? 如何启用多个AND同时请求?

1 个答案:

答案 0 :(得分:1)

来自类似问题的引用解决方案here: -

HttpURLConnection在保持连接活动时使用的连接池被破坏,以便它尝试使用已由服务器关闭的连接。默认情况下,Android会在所有连接上设置KeepAlive。

System.setProperty("http.keepAlive", "false");是一种解决方法,可以为所有连接禁用KeepAlive,从而避免连接池中的错误。

conn.setRequestProperty("Connection","Keep-Alive");为这个特定连接启用了KeepAlive,基本上颠倒了System.setProperty("http.keepAlive", "false");所做的事情。

此外,我总是明确地调用connect(),因为它可以清楚地显示结束连接设置的位置。我不确定调用此方法是否可选。

System.setProperty("http.keepAlive", "false");
HttpURLConnection conn = (HttpURLConnection) mURL.openConnection();
conn.setUseCaches(false); 
conn.setRequestProperty("User-Agent", useragent);
conn.setConnectTimeout(30000);
conn.setDoOutput(true); 
conn.setDoInput(true); 
consumer.sign(conn);

conn.connect();

InputSource is = new InputSource(conn.getInputStream());