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