1

我创建了一个 AsyncTask。

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

在 onPostExecute() 中,对话框被解除。

问题:我们点击取消按钮的点,我们已经到达 onPostExecute() 在这里,我们没有进入取消按钮 onclick 监听器。

其中,如果它是 inBackground(),那么它正确地进入了取消按钮的 onClick 侦听器。

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

4

2 回答 2

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();
于 2014-03-25T08:01:14.727 回答
0

您可以检查boolean. onPostExecute如果它是真的,你的工作是否会退出或从该代码返回。你可以在你的cancel button.

喜欢

boolean canExecute = true;

并在PostExcute

while(canExecute){}

并在取消按钮中设置canExecutefalse

于 2014-03-25T07:46:24.833 回答