2011-08-12 97 views
1

我有一個Activity,ProgressDialog被AsyncTask更新。我正在使用onCreateDialog來設置對話框。 AsyncTask正在寫入SDCard。在正常情況下(旋轉,背景等),我沒有任何問題。防止onCreateDialog在進程被終止然後重新啓動時被調用

問題是如果進程被終止,對話框會被重新創建。因此,我最終打開了一個「新打開」的活動和一個根本不應該顯示的對話框,因爲沒有設置AsyncTask來更新它。

例如,當SD卡出現時,Reaper來到並殺死進程(沒有onDestroy,noPause,noResume被框架調用)。但是,當應用程序恢復時(例如,從最近使用的應用程序),沒有線索沒有AsyncTask,我不得不顯示對話框。我無法在onCreateDialog中返回null,因爲應用程序會崩潰。

如何防止進程死亡後重新創建對話框?

例子:

 
- Activity gets shown 
    - onCreateDialog/onPrepareDialog show a progress dialog 
     - AsyncTask gets started exporting to SD card 
=> SD card gets unmounted 
- Process is killed 
- User selects the application from task switched 
- Activity gets created as new 
=> Android calls onCreateDialog/onPrepareDialog with the previously shown dialog ID 

通過該活動重新創建新的不存在的AsyncTask的時間,甚至有沒有SD卡。儘管如此,Android堅持要我展示一個對話框。

如何防止在創建過程中調用onCreate/PrepareDialog方法?或者唯一的選擇是調出一個錯誤對話框。

回答

0

你可以檢查一下SD卡是否插入或彈出直通

String state = Environment.getExternalStorageState(); 

並在它的返回值,你可以控制你的對話......

0

OnCreateDialog方法是一樣的onCreate方法,它將在你的活動中只被調用一次。您無法使用此方法控制對話框。相反,您的活動還應該包含以下代碼,每次顯示Dialog時都會調用該代碼。所以你必須在這個方法裏面處理事情。

@Override 
protected void onPrepareDialog(int id, Dialog dialog) { 
    super.onPrepareDialog(id, dialog); 
     } 
相關問題