4

完成时可以AsyncTask取消onPostExecute()吗?

还是任务一旦doInBackground()完成就不能再取消了?

4

2 回答 2

5

据我了解,任务仅在doInBackground()状态下运行,onPostExecute()意味着任务已完成且无法取消。

cancel()尝试取消此任务的执行。如果任务已完成、已被取消或由于其他原因无法取消,则此尝试将失败。如果成功,并且在调用取消时此任务尚未启动,则此任务不应该运行。如果任务已经开始,则该mayInterruptIfRunning参数确定是否应该中断执行该任务的线程以尝试停止该任务。

调用此方法将导致返回onCancelled(Object)后在 UI 线程上调用。doInBackground(Object[])调用此方法可确保onPostExecute(Object)永远不会调用该方法。调用此方法后,应isCancelled()定期检查 from的返回值,doInBackground(Object[])以尽早完成任务。

于 2012-07-24T06:18:49.813 回答
1

覆盖onCanceled()方法,请看下面的示例代码:

private class UpdateTask extends AsyncTask<Void, Void, Void> {

    private boolean running = true;

    @Override
    protected void onCancelled() {
        running = false;
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
        onUpdate();
    }

    @Override
    protected Void doInBackground(Void... params) {
         while(running) {
             publishProgress();
         }
         return null;
    }
 }
于 2012-07-24T06:21:13.530 回答