Android Dialog的 WindowLeaked窗体泄露异常

1.总结下Dialog相关的异常

  • 1.异常信息

    android.view.WindowLeaked: Activity com.hy.fly.ui.activity.usercenter.SettingActivity has leaked window 
    com.android.internal.policy.PhoneWindow$DecorView{d33b756 V.ED..... R......D 0,0-1080,135} that was originally added here
    at android.view.ViewRootImpl.<init>(ViewRootImpl.java:394)
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:330)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
    at android.app.Dialog.show(Dialog.java:346)
    at com.hy.fly.ui.fragment.usercenter.account.SettingsFragment.OnConfirm(SettingsFragment.java:201)
    at com.hy.fly.widget.CommonDialog.onDialogClick(CommonDialog.java:73)
    at com.hy.fly.base.BaseDialog.onClick(BaseDialog.java:38)
    at android.view.View.performClick(View.java:5264)
    at android.view.View$PerformClick.run(View.java:21297)
    at android.os.Handler.handleCallback(Handler.java:743)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:150)
    at android.app.ActivityThread.main(ActivityThread.java:5546)
    
    ...
    
  • 2.导致异常发生的具体操作:

    • 1.当界面是处于弹出Dialog的状况下,直接让应用退出;
    • 2.点击Dialog的confirm按钮时,跳转至另一Activity;
    • 3.以上操作都会导致日志中出现如上的异常,当然,跳转到另一Activity的时候,可能有时该异常时警告的,而不是error级别的,而我们没有注意到;
  • 3.不管是何级别的异常,我们都得注意注意,那么为何会出现此异常信息

    • 1.原因是这样的:Activity /Dialog /PopupWindow 都有相对应的WindowManager窗体管理器,而Dialog /PopupWindow 是依靠Activity而存在( 注意);
    • 2.所以当Dialog /PopupWindow还在显示的时候,将其依靠的Activity直接销毁掉,就会抛Window Leaked异常了,因为Dialog /PopupWindow的WindowManager已经没有谁可以附属了,所以它的窗体管理器已经泄漏了.
  • 4.既然知道了错误,那么就得去解决

    • 1.Stack Overflow上的解决方案:

      @Override
      public void onDestroy() {
          super.onDestroy();
          if(mDialog!=null && mDialog.isShowing()){
              mDialog.cancel();
          }
      }
      

2. Api的setOnKeyListener记录

  • 1.return true 的时候,点击手机回退物理键,Dialog不被取消,类似事件拦截
  • 2.return false 的时候,点击手机回退物理键,Dialog被取消
  • 3.当点击手机回退物理键的时候,不管返回true还是false,activity的onKeyDown方法都不会走
    ,可能被dialog抢走了事件

3.总结:注意日志上的提示信息

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值