窗体泄露(存在问题)

来源:互联网 发布:确保成本测算数据准确 编辑:程序博客网 时间:2024/06/16 18:51

错误日志

android.view.WindowLeaked: Activity com.example.administrator.individualresume.view.MainActivity has leaked window DecorView@fcd0a1f[] that was originally added here

日志分析

WindowLeaked意指窗体泄漏,即内存泄漏。

产生原因

Android每Activity都有一WindowManager(窗体管理器),同理构建于某Activity上对话框、PopupWindow也有相应WindowManager。因对话框、PopupWindown不能脱离Activity单独存在,故Dialog或PopupWindow处于显示时,因finish承载该Dialog或PopupWindow的Activity,导致该Dialog或PopupWindow窗体管理器无可附属Activity,故抛异常,即窗体管理器泄漏。

方案一

关闭Activity前,确保附属Dialog或PopupWindow已dismiss。

方案二(存在问题)

BaseActivity(基类)中,监听、异步方法、对话框混合使用,例如仿QQ异地登录强制下线。因某种原因,出现如下情况:

10-13 06:26:18.863 19300-19300/com.example.administrator.individualresume E/基类状态: true10-13 06:26:18.863 19300-19300/com.example.administrator.individualresume E/基类状态: true10-13 06:26:18.864 19300-19300/com.example.administrator.individualresume E/基类状态: false

此时需先判断BaseActivity是否关闭,没关闭则执行对话框操作;否则不执行。如下:

if (!BaseActivity.this.isFinishing()) {    // 对话框操作}

方案三

可在OnCreateDialog()中创建Dialog,让系统管理对话框。

原创粉丝点击