如何在下载时停止/取消文件? 即时通讯使用urlconnection和输入流。 代码工作但我不能取消它的下载。 我的下载代码:
int count;
try {
URL url = new URL(f_url[0]);
URLConnection conection = url.openConnection();
conection.connect();
int lenghtOfFile = conection.getContentLength();
InputStream input = new BufferedInputStream(url.openStream(),8192);
File myDir = getDir(Environment.DIRECTORY_MUSIC,
Context.MODE_PRIVATE);
Intent i = getIntent();
String name = i.getStringExtra("name");
File mypath = new File(myDir, name + ".mp3");
mypath.createNewFile();
mypath.mkdirs();
OutputStream output = new FileOutputStream(mypath);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress("" + (int) ((total * 100) / lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
Log.e("Error: ", e.getMessage());
}
return null;
}
答案 0 :(得分:0)
一般的想法是使用一个定期检查的标志(可以从外部线程设置):
while (!cancelled && shouldDoStuff) { doStuff(); }
使用标志允许代码运行到正常完成(好,sorta),区分不同的"例外",并执行适当的清理操作。
现在, AsyncTask已经通过可以检查的标志提供了适当的取消机制:
取消[AsyncTask]任务:可以随时通过调用
cancel(boolean)
取消任务。调用此方法将导致后续调用isCancelled()
返回true。 ..为了确保尽快取消任务,您应该始终定期检查isCancelled()
的返回值。
上面链接的文档中的修剪片段:
for (..) { // Keep going until done ..
publishProgress(..);
if (isCancelled()) break; // .. or until flagged.
}
(使用AsyncTask处理icky细节,比如正确实现所述标志,至少应为volatile
。)