如果网络速度较慢并且如果我不知道要下载的文件大小,如何设置connectTimeout

问题描述 投票:-1回答:1
private fun downloadAPKStream() : InputStream? {

        val url = URL(this.url)

        val connection = url.openConnection() as HttpURLConnection
        connection.requestMethod = "GET"
        connection.connect()            connection.connectTimeout = 5000

        fileSize = connection.contentLength

        val inputStream = connection.inputStream
        return inputStream
    }

我正在使用此方法下载apk文件。但是在这里,如果互联网很慢,则由于5000毫秒的超时,下载会陷入之间而无法完成。而且,如果我对此行发表评论或不提供任何** connection.connectTimeout,则它可以正常运行,但有时会陷入无限时间循环。我应该怎么做才能使其下载任何大小的文件,并且互联网连接速度也要慢。

java android settimeout httpurlconnection connection-timeout
1个回答
2
投票

您得到timeout的意思是错误的。不是最大给定(在这种情况下为网络)操作的允许时间,但最大不活动的允许时间,在此之后操作被视为停止并失败。因此,您应该将超时设置为某个sane值,这在现实生活中会很有意义。由于milliseconds中的值为,所以5000不是5,因为它只有5秒钟-任何小的网络故障都会使您的连接断开。将其设置为更高的值,例如30秒或1分钟或更长时间。

也请注意,这仅是connection超时。这意味着您应该能够在那段时间内建立与远程服务器的协议连接,但这对数据传输本身没有任何帮助。建立连接后,下一步将进行数据传输。对于数据传输超时(肯定应该设置得更高),您需要使用setReadTimeout()

最后,必须设置连接超时prior调用connect(),否则没有意义,因为为时已晚-这就是您现在在代码中得到的。

PS:改用Download Manager

© www.soinside.com 2019 - 2024. All rights reserved.