java - 安卓/Java : How To Stop Download After 5 Seconds?

标签 java android networking

我正在使用 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/

相关文章:

Java 程序可以在 Windows 7 上运行,但不能在 Windows 8 上运行?

java - JaCoCo 缺少可执行文件问题

java - 安卓工作室 : Specify location of gradle or android eclipse project

go - net.Conn 是否存在可恢复的读取错误?

java - Jfree :how do CandleStick chart with hour period

java - 在同一根上下文下托管静态内容和 JAX-RS 服务

android - iOS/Android 商店本地化的工作原理

android - ffmpeg 库太慢,无法压缩视频文件。安卓

python - 如何在转发之前进行深度数据包检查

java - 通过 MAC 地址检测 wi-fi 或有线网络接口(interface)