当进程被终止然后重新启动时,防止调用onCreateDialog

时间:2011-08-12 11:23:48

标签: android

我有一个Activity,其中ProgressDialog由AsyncTask更新。我正在使用onCreateDialog来设置对话框。 AsyncTask正在写入SDCard。在正常的情况下(轮换,去背景等)我没有问题。

问题是如果进程被终止,则会重新创建对话框。因此,我最终得到一个“新”打开的活动和一个根本不应该显示的对话框,因为没有设置AsyncTask来更新它。

例如,当SD卡获得ejecter时,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方法?或者唯一的选择是改为出现错误对话框。

2 个答案:

答案 0 :(得分:0)

如果通过插入或弹出

,可以检查SD卡
String state = Environment.getExternalStorageState();

并通过它的返回值,您可以控制对话框...

答案 1 :(得分:0)

OnCreateDialog方法类似于onCreate方法,在您的活动中只会调用一次。您无法使用此方法控制对话框。相反,您的活动还应具有以下代码,每次显示Dialog时都会调用该代码。因此,您必须处理此方法中的内容。

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