Dialog显示引起的问题 Activity has leaked window DecorView@5704632[] that was originally added here

dialog显示引起的界面无法打开的问题,报错信息如下:

  1. 03-08 18:02:48.521: E/WindowManager(6340): Activity com.linc.megatron.activity.ExamActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40568ea8 that was originally added here  
  2. 03-08 18:02:48.521: E/WindowManager(6340): android.view.WindowLeaked: Activity com.linc.megatron.activity.ExamActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@40568ea8 that was originally added here  
  3. 03-08 18:02:48.521: E/WindowManager(6340):  at android.view.ViewRoot.<init>(ViewRoot.java:264)  
  4. 03-08 18:02:48.521: E/WindowManager(6340):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)  
  5. 03-08 18:02:48.521: E/WindowManager(6340):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)  
  6. 03-08 18:02:48.521: E/WindowManager(6340):  at android.view.Window$LocalWindowManager.addView(Window.java:424)  
  7. 03-08 18:02:48.521: E/WindowManager(6340):  at android.app.Dialog.show(Dialog.java:241)  
  8. 03-08 18:02:48.521: E/WindowManager(6340):  at com.linc.megatron.base.BackKeyActivity.showDialog(BackKeyActivity.java:76)  
  9. 03-08 18:02:48.521: E/WindowManager(6340):  at com.linc.megatron.base.BackKeyActivity.onKeyDown(BackKeyActivity.java:62)  
  10. 03-08 18:02:48.521: E/WindowManager(6340):  at android.view.KeyEvent.dispatch(KeyEvent.java:1256)  
  11. 03-08 18:02:48.521: E/WindowManager(6340):  at android.app.Activity.dispatchKeyEvent(Activity.java:2078)  
  12. 03-08 18:02:48.521: E/WindowManager(6340):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1709)  
  13. 03-08 18:02:48.521: E/WindowManager(6340):  at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2628)  
  14. 03-08 18:02:48.521: E/WindowManager(6340):  at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2603)  
  15. 03-08 18:02:48.521: E/WindowManager(6340):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1875)  
  16. 03-08 18:02:48.521: E/WindowManager(6340):  at android.os.Handler.dispatchMessage(Handler.java:99)  
  17. 03-08 18:02:48.521: E/WindowManager(6340):  at android.os.Looper.loop(Looper.java:123)  
  18. 03-08 18:02:48.521: E/WindowManager(6340):  at android.app.ActivityThread.main(ActivityThread.java:3687)  
  19. 03-08 18:02:48.521: E/WindowManager(6340):  at java.lang.reflect.Method.invokeNative(Native Method)  
  20. 03-08 18:02:48.521: E/WindowManager(6340):  at java.lang.reflect.Method.invoke(Method.java:507)  
  21. 03-08 18:02:48.521: E/WindowManager(6340):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)  
  22. 03-08 18:02:48.521: E/WindowManager(6340):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)  
  23. 03-08 18:02:48.521: E/WindowManager(6340):  at dalvik.system.NativeStart.main(Native Method)

显然,我用Dialog确认是否退出,但是activity销毁后并没有处理Dialog的退出。

解决办法:

只需要在activity销毁时关闭Dialog就好。

[java] view plain copy

  1. @Override  
  2. protected void onDestroy() {  
  3.     if(mDialog != null) {  
  4.         mDialog.dismiss();  
  5.     }  
  6.     super.onDestroy();  
  7. }  
上一篇:阿里云合作伙伴峰会SaaS加速器专场 | 宜搭产品生态伙伴政策——宜搭:高效的低代码应用构建平台


下一篇:专访阿里云资深技术专家黄省江:中国SaaS公司的成功之路