URLConnection getInputStream阻塞线程

时间:2013-03-04 18:50:50

标签: java android urlconnection

我在getInputStream课程中遇到了URLConnection方法的问题。我知道在其他线程中讨论过其他一些类似的问题,但在我的案例中似乎没有单一的解决方案。

有趣的是,当第一次执行顺利时,进一步失败(阻止)。在描述问题之前,我想写一些背景知识。在这里。

基本上我有简单的客户端 - 服务器配置。由于我不想在客户端应用程序中硬编码服务器地址和端口,因此我使用HTTP服务器(nginx),从中可以检索实际的连接参数。

在客户端,有一个由服务控制的“网络线程”。服务启动线程并在需要时可以中断它。在run()方法的最开始,调用了以下函数:

private ConnectionParameters obtainConnectionParameters(String url) throws MalformedURLException, IOException {
    URLConnection connection = new URL(url).openConnection();
    InputStream in = connection.getInputStream(); // here the problem occurs

    ... // do some processing

    in.close();     
    return connectionParameters;
}

获取连接参数后,将打开另一个套接字连接。一段时间后,线程可能会关闭或只是到达run()方法的结尾。我仔细检查了它是否干净利落。

回到这个问题,我不知道是什么导致这种情况发生。你有什么可能导致这种行为的线索吗?

我还想提一下,服务和网络线程在活动的单独(后台)过程中运行。在这个过程中没有其他地方使用URLConnection。值得注意的是,方法obtainConnectionParameters中使用的所有变量都是本地的。

我想在描述中没有遗漏任何重要内容。否则请告诉我,所以我可以编辑我的帖子。

编辑(1):

我刚刚在线程Make an HTTP request with android中尝试过apache HTTP客户端  它运作良好。不过,我很想知道URLConnection出了什么问题。

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话,上面的代码片段会被多次调用,并且它第一次正常工作,但第二次在getInputStream()调用时阻塞?

问题可能出在服务器端。也许服务器一次只接受一个连接,你建立的第一个连接仍然是开放的?是否可以多次使用浏览器打开URL,以验证服务器是否按预期工作?