视图未附加到窗口管理器(有什么解决方法?)

8
我收到了来自我的应用程序的数百个错误报告,它们都是相同的。这真的很烦人,因为在我的测试设备(HTC Wildfire、Galaxy S I-II-III、Galaxy Mini、Galaxy Tab 10)中,这个错误从未发生过,无论是我还是我的测试伙伴,看起来用户做了一些与我们不同的事情。
由于这个原因,我不能给你太多关于这种情况的信息,有一件事情我看到了,就是一个对话框的关闭,我实际上从未通过代码调用它。
以下是错误信息:
java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:587)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:324)
at android.view.WindowManagerImpl$CompatModeWrapper.removeView(WindowManagerImpl.java:151)
at android.app.Dialog.dismissDialog(Dialog.java:328)
at android.app.Dialog$1.run(Dialog.java:119)
at android.app.Dialog.dismiss(Dialog.java:313)
at android.app.Dialog.cancel(Dialog.java:1113)
at hu.kulcssoft.ingyenkonyv.reader.Reader$JavaScriptInterface$1.run(Reader.java:199)
at android.os.Handler.handleCallback(Handler.java:605)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)

有人可以帮帮我吗?由于这个问题,我每周都会收到30-40个错误报告,但我真的无法弄清楚为什么会发生这种情况。

非常感谢任何建议。


2
看起来你正在关闭一个对话框,但在后台工作完成之后,该活动并不存在,就像旋转的情况一样,因此需要适当的检查,例如上下文为空时对话框正在显示等等...... - Dheeresh Singh
1
我的猜测是,在对话框消失之前,您的活动已经完成了。 - Ron
那么,如果我像userSeven7s说的那样在onFinish或onDestroy中解除它,这样能解决问题吗? - Adam Varhegyi
2个回答

13

如果我在onPause中执行会怎样?它是在onFinish和onDestroy之前运行的第一个方法。不过还是感谢你的建议,如果我更新了我的应用程序并且错误不再出现,我只能将其作为答案接受 :) 可能需要一周左右的时间。 - Adam Varhegyi
在Android 4.1之前,即使活动不支持旋转,锁屏也可以改变方向,而且锁屏只是在您的活动之上的一层。当您查看它(在4.1之前)时,您的活动已经收到了onResume :| - RelativeGames

1
 @Override
            public void onConfigurationChanged(Configuration newConfig) {
                // TODO Auto-generated method stub
                super.onConfigurationChanged(newConfig);
                YourProgressDialog.dismiss();
            }

同样地,您可以在活动的onFinsh()、onDestroy()或onBackPressed()上使用它,具体取决于错误的上下文。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接