私のアプリでは、長期的なバックグラウンドプロセス中にモーダルであるダイアログを表示しています。
このダイアログは、アンドロイドがバックグラウンドタスクから戻ると閉じられます。ダイアログが安全に消されるかどうかを確認します。
final ProgressDialog progressDialog = ProgressDialog.show(activity, "", "Doing something long running", true, true);
new Thread(new Runnable() {
public void run() {
someLongRunningCode(); // (not using AsyncTask!)
activity.runOnUiThread(new Runnable() {
public void run() {
progressDialog.dismiss();
}
});
}
}).start();
しかし、現在では、バックグラウンド・プロセスがまだ活性が再作成されるので、progressdialogアクティビティから取り外されます実行中にユーザがデバイスを回転させるとき。
長時間実行されているプロセスが完了すると、アンドロイドは明らかに(今取り外された)進行状況ダイアログを非表示にして、その結果例外:java.lang.IllegalArgumentException: View not attached to window manager
を表示しようとします。
ダイアログを閉じても安全かどうかを確認する方法はありますか?
編集:既存のダイアログを新しく作成したアクティビティにアタッチする方法はありますか?
新しいクローンのダイアログもうまくいくはずです。
実際には、タスクがまだ実行中であるため、新しく作成されたアクティビティに既存のダイアログを添付する方法があれば、私にとって最善の解決策になります。それを行う方法はありますか?また、それを反映するために私の質問を更新しました。 – PureSpider
ランドスケープとポートレートに別のレイアウトやドローイングを使用していない場合は、マニフェストのconfigChangeをアクティビティに対してオーバーライドするだけで、アクティビティを破棄することができます(すべてが正しく回転してサイズ変更されます)。もう1つのオプションは、onSaveInstanceStateとonRestoreInstanceStateについて多くの作業を必要とするため、スレッドがその時間内に実際に終了した場合、タイミングの問題に非常に注意する必要があります。 –
その方法はGoogleによって落胆...なぜですか? – PureSpider