5

私のアプリでは、モーダルな長時間実行中のバックグラウンド プロセス中にダイアログを表示しています。
このダイアログは、android がバックグラウンド タスクから戻ると閉じられます。

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 がアクティビティから切り離されます。
長時間実行されるプロセスが完了すると、Android は明らかに (現在切り離されている) 進行状況ダイアログを非表示にしようとし、例外が発生します: java.lang.IllegalArgumentException: View not attached to window manager.
ダイアログを閉じても安全かどうかを確認する方法はありますか?

編集:または、さらに良いことに、既存のダイアログを新しく作成されたアクティビティにアタッチする方法はありますか?
新しい複製されたダイアログも問題ありません。

4

3 に答える 3

0

以前にこの問題に直面し、以下のコードを使用して解決しました。

private boolean isDialogViewAttachedToWindowManager() {
    if (dialog.getWindow() == null) return false;
    View decorView = progressDialog.getWindow().getDecorView();
    return decorView != null && decorView.getParent() != null;
}
于 2021-06-10T09:52:15.977 に答える