2011-08-12 10 views
1

AsyncTaskによって更新されるProgressDialogを持つアクティビティがあります。私は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カードがありません。それでもアンドロイドは私がダイアログを表示することを主張している。

再作成中にonCreate/PrepareDialogメソッドが呼び出されないようにするにはどうすればよいですか?または唯一の選択肢は、代わりにエラーダイアログを表示することです。それが挿入または排出

String state = Environment.getExternalStorageState(); 

を通して、それの戻り値を介して、あなたのダイアログをコントロールすることができますされている場合

答えて

0

あなたはSDカード上のチェックを行うことができます...

0

OnCreateDialog方法は、意志のonCreateメソッドのようなものですあなたの活動で一度だけ呼び出されます。このメソッドを使用してダイアログを制御することはできません。代わりに、あなたのアクティビティにはDialogが表示されるたびに呼び出される次のコードが必要です。だから、この方法の中で物事を扱う必要があります。

@Override 
protected void onPrepareDialog(int id, Dialog dialog) { 
    super.onPrepareDialog(id, dialog); 
     } 
関連する問題