我正在使用 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 秒的方法?
提前致谢。
最佳答案
您需要在不同的线程中单独计算时间和下载。你是对的,因为两者在同一个线程中,limitTime = System.nanoTime();
只会在 is.read(buf);
时执行完成了
关于java - 安卓/Java : How To Stop Download After 5 Seconds?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12378289/