阻止下载,没有任何例外

时间:2013-02-14 10:07:55

标签: android download inputstream urlconnection timeoutexception

我尝试从移动设备下载文件。移动设备通过wifi连接,有时候,移动设备的位置变化,所以连接到另一个wifi。对于下载,我使用:

    final URLConnection ucon = url.openConnection();
    ucon.setReadTimeout(10000);
    ucon.setConnectTimeout(10000);
    final InputStream inputStream = ucon.getInputStream();
    final BufferedInputStream bis = new BufferedInputStream(inputStream);

在bis.available()和bis.read()之后获取数据直到字节数> ucon.getContentLength()。

当wifi连接发生变化时,我预计会出现(IO)异常(或至少是TimeoutException),但没有。

在另一个类中,我检查网络连接(使用BroadcastReceiver),我看到事件断开/连接正常。所以,我可以使用广播接收器停止并重新启动下载,但我认为这不是最佳方式。

你知道在这种情况下得到例外吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为在这种情况下可能无法获得异常/错误,至少不可靠。

对等体基本上不可用,因此您将不再接收任何数据。如果您不发送数据(如果您使用HTTP下载则不会发生这种情况),只要您没有实现自己的超时,就不会发生任何事情。

所以我会采用你的方式来监听网络变化事件。

进一步说明:

问题是,对于TCP连接,您(或OS)只能检测错误:

  • 如果您发送数据并且没有来自另一方的ACK
  • 如果对方发送RST或类似的东西。

如果对方已经离开(或在您的情况下无法访问)并且您没有发送数据,则您无法检测到错误(仅通过您自己的超时)。