我正在使用 AsyncTask 下载文件,目的是测量连接的下载速度。我想在 5 秒后停止下载,这样我就可以检查下载的总字节数并计算速度。这是我正在使用的代码(位于 doInBackground() 方法中):
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();
}
当连接到 WiFi 时,它工作正常。测得的速度非常准确,完成测试只需 5 秒。但是,一旦我转移到 3G,测试需要 10 到 15 秒才能完成(我注意到连接越慢,完成所需的时间就越长)。
怎么会?我猜操作系统正在等待它发送的 read() 请求的回复,但不确定。
你知道无论如何都会将下载限制在 5 秒的方法吗?
提前致谢。