私も同様の問題がありました。これは、HttpUrlConnection won't time out中ダウンロードです。たとえば、ダウンロードを行っているときにWi-Fiをオフにすると、私は同じ割合で停止してダウンロードを続けています。
DownloaderTaskという名前のAsyncTaskに接続されたTimerTaskを使用して解決策を見つけました。試してみてください。そして、実際のダウンロードループでタイムアウトエラーのタイマー設定
class Timeout extends TimerTask {
private DownloaderTask _task;
public Timeout(DownloaderTask task) {
_task = task;
}
@Override
public void run() {
Log.w(TAG,"Timed out while downloading.");
_task.cancel(false);
}
};
:
_outFile.createNewFile();
FileOutputStream file = new FileOutputStream(_outFile);
out = new BufferedOutputStream(file);
byte[] data = new byte[1024];
int count;
_timer = new Timer();
// Read in chunks, much more efficient than byte by byte, lower cpu usage.
while((count = in.read(data, 0, 1024)) != -1 && !isCancelled()) {
out.write(data,0,count);
downloaded+=count;
publishProgress((int) ((downloaded/ (float)contentLength)*100));
_timer.cancel();
_timer = new Timer();
_timer.schedule(new Timeout(this), 1000*20);
}
_timer.cancel();
out.flush();
それならばタイムアウトにして、20秒でさえ1Kダウンロードされませんが、それは代わりのキャンセル永遠にダウンロードされているように見える。
2つのことのためにIPSを確認することができます。あなたのアプリがハングしないようにするには、接続メソッドを別のスレッドに入れます。第二に、あなたはそれが完全に "働いた"と言った、悪い接続をシミュレートするためにあなたは何をしていますか? – Otra
@Otra私はprogressdialogを使って別のスレッドでそれを持っています。基本的に何が起こるかは、接続が良好であれば、タスクはそのことを行います。しかし、接続が悪い場合、進歩ダイアグラムは長年にわたって維持されます。悪い接続をシミュレートするために、私はタイムアウト時間を短縮しています。代わりに15秒、1秒を与える。テスト用です。それとも間違っている? –
HttpURLConnection.setReadTimeout(ミリ秒); –