在Android中的AsyncTask中无法取消取消按钮

时间:2014-03-25 07:41:48

标签: android android-asynctask cancel-button

我创建了一个AsyncTask。

在onPreExecute()中创建一个进度对话框。 在创建对话框时,取消按钮被添加到对话框中。 在哪个任务被取消。

在onPostExecute()中,对话框被取消。

问题: 我们点击取消按钮的点,我们已经到达onPostExecute() 在这里,我们不会进入取消按钮onclick Listener。

如果它是inBackground(),那么它正确地进入取消按钮的onClick Listener。

如何处理用户点击取消,用户进入onPostExecute()的那一刻,那就是为什么不能执行onClick监听器?

2 个答案:

答案 0 :(得分:0)

您可以在boolean中查看onPostExecute变量。如果它是真的你的工作退出或从该代码返回。您可以在cancel button上设置布尔变量。

boolean canExecute = true;

并在PostExcute执行

while(canExecute){}

并在取消按钮中设置canExecutefalse;

答案 1 :(得分:0)

我认为问题并不完全是你所描述的。 (没有代码就不容易了......请发一些代码)

一旦你到达onPostExecute并且当用户点击取消时对话框还没有解除:执行取消监听器,但asyncTask.cancel(...)将失败:即它返回false(因为任务已经执行了。)

如果您需要中断onPostExecute代码:然后在AsyncTask.doInBackground中移动该代码并尽可能简单地取消按钮代码:

if(asyncTask.cancel(true)){
    dialog.dismiss();
}else{
    //the asyncTask is already in the onPostExecute
    //the dialog will be dismissed in the onPostExecute... so don't do anything.
}

保持onPostExecute()的代码尽可能简单:

dialog.dismiss();