1

在我的主要活动中,我有一个AsyncTask运行,如果我的活动由于任何原因而被破坏,那么在postExecute()更新ListView. 之前postExecute()会调用AyncTask. onPostExecute()UI 更新将引发异常。

我认为的一种方法是取消onDestory(). 但是,如果异步任务在 postExecute 中,则在销毁时调用如何处理它。

4

2 回答 2

1

但是,如果异步任务在 postExecute 中,则在销毁时调用如何处理它。

这种情况根本不可能发生,因为这两个方法都是在 UI 线程上调用的,这意味着一个在调用另一个之前完成。

当您的 UI 不再可用时(在 中onDestroy),取消您的AsyncTask.

onPostExecute您可以检查的取消状态AsyncTask。您也可以isFinishingActivity.

于 2013-07-15T12:53:43.580 回答
-1

一些你可以如何处理你的代码异常,你可以在 AsyncTask 中处理异常

public abstract class ExceptionAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {

    private Exception exception=null;
    private Params[] params;

    @Override
    final protected Result doInBackground(Params... params) {
        try {
            this.params = params; 
            return doInBackground();
        }
        catch (Exception e) {
            exception = e;
            return null;
        }
    }

    abstract protected Result doInBackground() throws Exception;

    @Override
    final protected void onPostExecute(Result result) {
        super.onPostExecute(result);
        onPostExecute(exception, result);
    }

    abstract protected void onPostExecute(Exception exception, Result result);

    public Params[] getParams() {
        return params;
    }

}
于 2013-07-15T12:41:09.997 回答