来源:

按字面了解,Window Leaked大概就是说一个窗体泄漏了,也就是我们常说的内存泄漏,为什么窗体会泄漏呢?

产生原因:
我们知道Android的每一个Activity都有个WindowManager窗体管理器,同样,构建在某个Activity之上的对话框、PopupWindow也有相应的WindowManager窗体管理器。因为对话框、PopupWindown不能脱离Activity而单独存在着,所以当某个Dialog或者某个PopupWindow正在显示的时候我们去finish()了承载该Dialog(或PopupWindow)的Activity时,就会抛Window Leaked异常了,因为这个Dialog(或PopupWindow)的WindowManager已经没有谁可以附属了,所以它的窗体管理器已经泄漏了。


解决方法:
关闭(finish)某个Activity前,要确保附属在上面的Dialog或PopupWindow已经关闭(dismiss)了。

比如:

@Override    protected void onDestroy() {        super.onDestroy();        if (mDialog != null) {            mDialog.dismiss();        }    }

吸取教训:

如果我们在某activity中声明了Dialog或者PopupWindow,确保在关闭当前activity时候,这些状体已经关闭,否则会引起Window Leaked

更多相关文章

  1. android.view.WindowLeaked的解决办法 has leaked window androi
  2. 关于android的设备管理器-DevicePolicyManager(二)
  3. 小米文件管理器源码
  4. Android(安卓)Native内存泄漏诊断
  5. Android(安卓)Activity 图形化生成简读
  6. android 实现SSL握手协商
  7. 在Android下抓包
  8. Android(安卓)Studio 检测内存泄漏与解决方法
  9. 【Xcode应用】iOS性能分析

随机推荐

  1. join为啥会阻塞主线程?
  2. 揭秘一条select语句,在MySQL中权限访问控
  3. MySQL的最低硬件要求?
  4. Linux下Shell的for循环语句N种写法
  5. MySQL8.0.20 正式发行(GA)
  6. 如何知道你创建的MySQL索引是高效,合理的
  7. 由细嫩双手引起的IT环境生产事故
  8. MySQL如何管理客户端的连接?
  9. 分享两个Mysql在线全备和binlog日志备份
  10. MySQL如何管理客户端连接?线程池篇