2011-10-16 39 views
1

我目前使用下面的代碼來顯示/在我的Andorid應用程序隱藏ProgressDialog(稱爲從withing MyActivity):現在爲什麼我應該使用onPrepareDialog等在Android中顯示ProgressDialog?

private void startTask() { 
    new MyTask().execute(); 
} 

private class MyTask extends AsyncTask<A, String, C> { 
    private ProgressDialog pd; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     this.pd = ProgressDialog.show(MyActivity.this, "Title", "Message", true, true); 
     pd.setOnCancelListener(new OnCancelListener() { 
      public void onCancel(DialogInterface dialog) { 
       MyTask.this.cancel(true); 
      } 
     }); 

    } 

    @Override 
    protected void onProgressUpdate(String... values) { 
     super.onProgressUpdate(values); 
     this.pd.setMessage(values[0]); 
    } 

    @Override 
    protected void onCancelled() { 
     super.onCancelled(); 
     Toast.makeText(MyActivity.this, "cancelled", Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    protected void onPostExecute(RequestResult result) { 
     super.onPostExecute(result); 
     this.pd.dismiss(); 
    } 
} 

,因爲我讀了很多onCreateDialog活動,我只是想知道我的做法有什麼缺點,我沒有想到,甚至爲什麼我更喜歡onCreateDialog機制。

回答

0

[增訂]

這種方法的問題是,在活動的情況下會被破壞(例如,在旋轉)您的AsyncTask將保留在內存中,從而創建臨時內存泄漏。此外,它會在嘗試訪問Activity的onDestroy()後訪問ProgressDialog時導致IllegalArgumentException。

+0

那麼,至少它告訴我,這不可能是錯的......無論如何感謝您的意見! – z00l

相關問題