我有一个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方法?或者唯一的选择是改为出现错误对话框。
答案 0 :(得分:0)
如果通过插入或弹出
,可以检查SD卡String state = Environment.getExternalStorageState();
并通过它的返回值,您可以控制对话框...
答案 1 :(得分:0)
OnCreateDialog方法类似于onCreate方法,在您的活动中只会调用一次。您无法使用此方法控制对话框。相反,您的活动还应具有以下代码,每次显示Dialog时都会调用该代码。因此,您必须处理此方法中的内容。
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
super.onPrepareDialog(id, dialog);
}