一旦onPostExecute()被调用,调用cancel()就不会调用onCancelled()吗?

时间:2016-05-17 23:44:16

标签: android android-asynctask

我试图忽略AsyncTask的onCancelled(Boolean aBoolean)对话框: 如果我在AsyncTask运行时调用'myAsyncTask.cancel(true)',它将被调用。 2.如果AsyncTask已经调用onPostExecute(),它将不会被调用。

有人有想法吗?

2 个答案:

答案 0 :(得分:1)

实际上,AsyncTask.cancel()不会在不考虑后果的情况下终止线程。它只是将AsyncTask设置为“已取消”状态。由AsyncTask的开发人员来决定是否遵守取消状态。

其中一个策略是不时检查isCancelled()并采取适当的行动。 onPostExecute您还可以手动读取“已取消”状态并调用onCancelled()(或具有通用逻辑的任何其他功能)。

答案 1 :(得分:0)

总之,你不能不。

当你调用.cancel(true)方法时,AsyncTask执行onCancelled而不是onPostExecute。

onPostExecute表示后台任务已结束,返回UI线程。

我认为有新方法。

在onPostExecute中,只需添加布尔值isProcessing = true;

当你不处理onPostExecute时,只需将isProcessing的值切换为false。 (我不确定那样)

@Override
protected void onPostExecute(Long result) {
    if (isProcessing) {
        Log.d(TAG, "onPostExecute - " + result); 
    }
}