2013-07-15 61 views
1

在我的主要活动我有一个AsyncTask运行这postExecute()更新了ListView. 现在之前,如果我的行为被摧毁postExecute()被调用因任何原因会是什么AyncTask的状态。 onPostExecute() UI更新会引发异常。状态下,当活动被销毁

我认为的一种方法是取消onDestory()中的ayncTask。但是如果asynctask在postExecute中被销毁时被调用如何处理它。

+2

你可以检查你的活动没有完成onPostExecute,只有更新UI,如果没有。 –

+0

@ KunalS.Kushwah不,它不会! AsyncTask是一个后台运行进程,所以它的'doInbackground()'将会运行,尽管Activity被破坏了! –

+0

@KenWolf如何检查? – mSO

回答

-1

一些美国可以如何处理üR代码里面除了这样,U可以在的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; 
    } 

} 
+0

可以请你解释一下 – mSO

+0

我们重写doInBackground在我们的子类中做后台工作,在需要的地方愉快地抛出异常。然后你被迫执行onPostExecute(因为它是抽象的),这轻轻地提醒你处理所有类型的Exception,它们作为参数传递。在大多数情况下,异常会导致某种类型的UI输出,所以onPostExecute是一个完美的地方。 – 2013-07-15 12:52:23

0

但如果是的AsyncTask在postExecute上破坏时被调用如何处理它。

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

当您的用户界面不再可用时(在onDestroy),取消您的AsyncTask。您可以检查AsyncTask的取消状态。您还可以在Activity上查询isFinishing

+0

downvoters请评论 – njzk2

相关问题