2013-07-15 151 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

相關問題