2011-08-12 140 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); 
     } 
相关问题