我正在使用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秒內限制下載嗎?
在此先感謝。
在我的答案採取:) –