加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 19:37:22 所属栏目:Java 来源:网络整理
导读:在我的应用程序中,我在长时间运行的后台进程中显示一个对话框,这是一个模态. android从后台任务返回时,该对话框被解除. final ProgressDialog progressDialog = ProgressDialog.show(activity,"","Doing something long running",true,true);new Thread(new
在我的应用程序中,我在长时间运行的后台进程中显示一个对话框,这是一个模态.
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:视图未附加到窗口管理器.
有没有办法检查是否可以安全地关闭对话框?

编辑:或者更好的是,有没有办法将现有的对话框附加到新创建的活动?
一个新的克隆对话框也没问题.

解决方法

抓住异常并忽略它. Android决定在轮换时重新启动活动会使线程有一些奇怪的例外情况.但是你想要的最终结果是没有显示对话框.如果您只是捕获异常,则不会显示任何对话框.所以你很好.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读