我在AsyncTask中有一个自定义进度对话框作为下载进度,我想在按下自定义取消按钮时中断doInBackground。在对话框解散时,doInBackground似乎恢复没有任何问题!
答案 0 :(得分:1)
您可以从对话框的取消事件中调用AsyncTask.cancel(true)
。为此,您需要引用AsyncTask,这可能是在任务启动时初始化的实例变量。然后在asyncTask.doInBackground()
方法中,您可以检查isCancelled()
,或覆盖onCancelled()
方法并停止正在运行的任务。
示例:
//Asynctask instance variable
private YourAsyncTask asyncTask;
//Starting the asynctask
public void startAsyncTask(){
asyncTask = new YourAsyncTask();
asyncTask.execute();
}
//Dialog code
loadingDialog = ProgressDialog.show(ThisActivity.this,
"",
"Loading. Please wait...",
false,
true,
new OnCancelListener()
{
@Override
public void onCancel(DialogInterface dialog)
{
if (asyncTask != null)
{
asyncTask.cancel(true);
}
}
});
编辑:如果从AsyncTask内部创建对话框,代码就不会有太大差异。你可能不需要实例变量,我想你可以在那种情况下调用YourAsyncTask.this.cancel(true)。
答案 1 :(得分:1)
I want to interrupt doInBackground when my custom cancel button pressed.
=>在取消按钮单击事件中调用AsyncTask的 cancel()
方法。现在这还不足以取消doInBackground()过程。
例如:
asyncTask.cancel(true);
要通知您已使用cancel()方法取消了AsyncTask,您必须使用isCancelled()
内的 doInBackground()
检查是否已取消。
例如:
protected Object doInBackground(Object... x)
{
// do your work...
if (isCancelled())
break;
}