【发布时间】:2013-12-04 05:30:14
【问题描述】:
我在运行 Jellybean (4.1 - 4.3) 的设备中遇到了一些 HttpUrlConnection 问题,其中连接未关闭,并在执行多次后导致 SocketException“打开的文件过多”。
我确实调用了 HttpUrlConnection.disconnect() 并在 finally 块中关闭了所有 Inputstream、Outputstream、Reader 和 Writers。
转到 adb shell 并执行 netstat 显示应用程序创建的所有连接都处于 CLOSE_WAIT 状态。
InputStream inputStream = httpUrlConnection.getInputStream();
// After calling inputStream.read() then the problem occurs. I think the
// inputstream doesn't get closed even after calling close in a finally block.
// The InputStream is a ChunkedInputStream if that helps.
我尝试过其他运行 2.3.3、4.0.3 和 4.4 的设备,没有遇到这个问题。
还有其他方法可以手动关闭连接吗?
【问题讨论】:
-
我遇到了同样的问题,但它被隔离到了 Android Emulator。在真实设备上尝试时,它没有显示这些问题。并不是说这会对其他人有所帮助,但是我尝试了一切以解决模拟器上的问题,然后我只是在真实设备上尝试了,这不是问题。模拟器运行的是 Android 6,而真实设备运行的是 Android 9,顺便说一句。
-
回来回复我自己的评论。我们最终也确实在真实设备上看到了这一点,但只是在一堆下载 URL 无效且未返回实际内容的情况下。所以肯定有一些东西仍然在泄漏并导致打开的文件太多。
标签: java android httpurlconnection