我正在使用AsyncTask来下载文件,目的是测量连接的下载速度。我想在5秒后停止下载,以便我可以检查下载的总字节数并计算速度。下面是我使用(这被放置在doInBackground()方法中)的代码:Android/Java:如何在5秒后停止下载?
try{
InputStream is = new URL("http://www.domain.com/linux.iso").openStream();
byte[] buf = new byte[1024];
long startTime = System.nanoTime();
long limitTime = System.nanoTime();
long difference = 0;
while (difference < 5000000000){ /*5 billion nanoseconds = 5 seconds*/
is.read(buf);
limitTime = System.nanoTime();
difference = limitTime - startTime;
}
is.close();
}
catch(Exception e){
e.printStackTrace();
}
当连接到无线网络,这是工作的罚款。测得的速度非常准确,完成测试需要5秒。但是,一旦我转移到3G,测试需要10到15秒才能完成(我注意到连接越慢,完成时间就越长)。
怎么回事?我猜测操作系统正在等待它发送的read()请求的回复,但不确定。
你知道一种方法,无论如何都会在5秒内限制下载吗?
在此先感谢。
+0
在我的答案采取:) –