活动被销毁时的AsyncTask状态

时间:2013-07-15 12:35:05

标签: android

在我的主要活动中,我有一个AsyncTask正在postExecute()更新ListView. 现在,postExecute()被调用之前,如果我的活动由于任何原因被摧毁AyncTask的状态。 onPostExecute() UI更新将引发异常。

我想到的一种方法是取消onDestory()中的ayncTask。但是如果asynctask在postExecute中,则在destroy上调用如何处理它。

2 个答案:

答案 0 :(得分:1)

  

但是如果asynctask在postExecute中,则在destroy上调用如何处理它。

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

当您的用户界面不再可用时(onDestroy),请取消AsyncTask

onPostExecute中,您可以检查AsyncTask的取消状态。您还可以在isFinishing上查看Activity

答案 1 :(得分:-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;
    }

}