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,则它可以正常运行,但有时会陷入无限时间循环。我应该怎么做才能使其下载任何大小的文件,并且互联网连接速度也要慢。
您得到timeout
的意思是错误的。不是最大给定(在这种情况下为网络)操作的允许时间,但最大不活动的允许时间,在此之后操作被视为停止并失败。因此,您应该将超时设置为某个sane值,这在现实生活中会很有意义。由于milliseconds中的值为,所以5000
不是5,因为它只有5秒钟-任何小的网络故障都会使您的连接断开。将其设置为更高的值,例如30秒或1分钟或更长时间。
也请注意,这仅是connection超时。这意味着您应该能够在那段时间内建立与远程服务器的协议连接,但这对数据传输本身没有任何帮助。建立连接后,下一步将进行数据传输。对于数据传输超时(肯定应该设置得更高),您需要使用setReadTimeout()。
最后,必须设置连接超时prior调用connect()
,否则没有意义,因为为时已晚-这就是您现在在代码中得到的。
PS:改用Download Manager。