检查是否可以安全地关闭对话框

2023-12-26

在我的应用程序中,我在长时间运行的模态后台进程中显示一个对话框。
当 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();

然而,现在,当用户在后台进程仍在运行时旋转设备时,会重新创建 Activity,因此进度对话框会与 Activity 分离。
当长时间运行的进程完成时,Android 显然会尝试隐藏(现已分离的)进度对话框,这会导致异常:java.lang.IllegalArgumentException: View not attached to window manager.
有什么方法可以检查关闭对话框是否安全?

编辑:或者更好的是,有什么方法可以将现有对话框附加到新创建的活动吗?
一个新的克隆对话框也可以。


只需捕获异常并忽略它即可。 Android 决定轮流重新启动 Activity,这使得线程出现一些类似的奇怪异常。但您想要的最终结果是不显示对话框。如果您只是捕获异常,则不会显示任何对话框。所以你很好。

如果您没有为横向和纵向使用单独的布局/可绘制对象,则只需覆盖活动清单中的 configChange,这样它就不会破坏活动(它仍然会为您正确旋转和调整所有内容的大小)。这样就会出现相同的对话框,并且您不应该遇到异常。另一个选项需要围绕 onSaveInstanceState 和 onRestoreInstanceState 进行大量工作,并且如果线程实际上在此期间完成,则需要非常小心计时问题。整个旋转想法的重新创建活动不适用于多线程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查是否可以安全地关闭对话框 的相关文章

随机推荐