gpt4 book ai didi

java - 在 Android 中取消 AsyncTask

转载 作者:行者123 更新时间:2023-11-30 11:41:25 24 4
gpt4 key购买 nike

我在我的 Android 应用程序中使用 AsyncTask

这是我的任务:

public class MyTask extends AsyncTask<String, String, Boolean> {
private ProgressDialog progressDialog;
private boolean isCancelled = false;
public MyTask(ProgressDialog progressDialog) {
this.progressDialog = progressDialog;
}

@Override
protected Boolean doInBackground(String... params) {
try {
if (!isCancelled()) {
isCancelled = false;
} else
isCancelled = true;
} catch (Exception e) {

isCancelled = true;
}
return isCancelled;
}

@Override
protected void onCancelled() {
super.onCancelled();
isCancelled = true;
}

@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
progressDialog.dismiss();
if (!isCancelled) {
// start an activity
}
}
}

我想在按下设备的后退按钮时取消此任务并取消 ProgressDialog,但此任务执行得很快。当按下后退按钮时,ProgressDialog 被取消,但任务完成。

AsyncTask 是从这样的 Activity 中调用的:

ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Loading");
progressDialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
if (myTask!= null
&& myTask.getStatus() != AsyncTask.Status.FINISHED
&& !myTask.isCancelled()) {
myTask.cancel(true);
}
}
});

progressDialog.show();
myTask = new MyTask(progressDialog);
myTask.execute();

在记录日志时,我发现在执行 onPostExecute() 的条件后,对话框被关闭(调用 onDismissListener)。如何正确取消此任务?

我的 Intent 是无论任务是否完成都按下后退按钮取消任务。是否可以从其 onPostExecute() 中取消 AsyncTask?

最佳答案

实际上,您的代码看起来是正确的,

在 ProgressDialog 的 OnCancel()

在调用 myTask.cancel(true); 方法后,onCancelled(Object),而不是onPostExecute(Object) 将在 doInBackground(Object[]) 之后调用。

注意:

If you call cancel(true), an interrupt will be sent to the background thread, 
which may help interruptible tasks. Otherwise, you should simply make sure to check
isCancelled() regularly in your doInBackground() method.

您可以在 http://code.google.com/p/shelves 查看相关示例.

但我建议您不要取消 AsyncTask 并保持您的 boolean 标志仅关闭按下后退时的对话框,并且 AsyncTask 的 onPostExecute() 决定如何使用您的 boolean 标志条件处理结果。

关于java - 在 Android 中取消 AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12258067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com