Android 安卓停止下载
在我的应用程序中,我下载并解析一个html页面。但是,我希望能够在其轨道上停止下载(即,当用户点击“取消”时) 这是我现在使用的代码,它是从ASyncTask的doInBackground调用的 如何从异步任务外部取消此请求 我目前使用Android 安卓停止下载,android,html,download,abort,Android,Html,Download,Abort,在我的应用程序中,我下载并解析一个html页面。但是,我希望能够在其轨道上停止下载(即,当用户点击“取消”时) 这是我现在使用的代码,它是从ASyncTask的doInBackground调用的 如何从异步任务外部取消此请求 我目前使用 不能使用AsyncTask.cancel()?然后,您应该能够使用onCancelled回调返回到主活动。好的,我相信我已经解决了这个问题 在我的活动类中,我有一个变量(布尔值)failed。另外,我在扩展ASyncTask的活动中有一个私有的下载程序类。这样,
不能使用
AsyncTask.cancel()
?然后,您应该能够使用onCancelled
回调返回到主活动。好的,我相信我已经解决了这个问题
在我的活动类中,我有一个变量(布尔值)failed
。另外,我在扩展ASyncTask
的活动中有一个私有的下载程序
类。这样,Downloader
类就可以访问failed
布尔值。当活动启动时,它启动下载程序
任务,并弹出进度对话框。任务完成后,它关闭对话框,然后继续处理下载的内容
但是,当用户取消进度对话框时,failed
设置为true,并通过调用finished
将用户发送回上一个活动。与此同时,Downloader
仍在忙于下载。因为结果现在是不必要的,我们希望它尽快停止使用资源。为了实现这一点,我将doInBackground
方法分解为尽可能多的步骤。在每一步之后,我检查失败
是否仍然是错误
,当它设置为真
时,它不会进入下一步。请参见下面的操作。此外,BufferedReader读取器
是公共的,在onCancelled
方法中,我执行reader.close()
。这将抛出各种异常,但这些异常都被正确捕获
public void DoInBackground(.........) {
try {
URL url = new URL(uri);
URLConnection conn = url.openConnection();
if (!failed) {
isr = new InputStreamReader(conn.getInputStream());
if (!failed) {
reader = new BufferedReader(isr);
publishProgress(1);
if (!failed) {
TagNode node = cleaner.clean(reader);
publishProgress(2);
return node;
}
}
}
} catch (Exception e) {
failed = true;
Log.v("error",""+e);
}
}
@Override
protected void onCancelled() {
failed = true;
if (reader != null)
try {
reader.close();
} catch (IOException e) {
failed = true;
}
if (isr != null)
try {
isr.close();
} catch (IOException e) {
}
}
我知道我可以将下载过程分解为更小的部分,但我正在下载非常小的文件,所以这并不重要。这也会自动停止下载吗?我使用URLConnection类进行下载。不,事实证明它不会(关于这个问题的文档是错误的-调用
AsyncTask。取消(true)
不会停止任务的实际运行。你能发布代码来实际下载吗?我已将其添加到问题中。谢谢你的麻烦!
public void DoInBackground(.........) {
try {
URL url = new URL(uri);
URLConnection conn = url.openConnection();
if (!failed) {
isr = new InputStreamReader(conn.getInputStream());
if (!failed) {
reader = new BufferedReader(isr);
publishProgress(1);
if (!failed) {
TagNode node = cleaner.clean(reader);
publishProgress(2);
return node;
}
}
}
} catch (Exception e) {
failed = true;
Log.v("error",""+e);
}
}
@Override
protected void onCancelled() {
failed = true;
if (reader != null)
try {
reader.close();
} catch (IOException e) {
failed = true;
}
if (isr != null)
try {
isr.close();
} catch (IOException e) {
}
}