日志
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/基类状态: true
10-13 06:26:18.863 19300-19300/com.example.administrator.individualresume E/基类状态: true
10-13 06:26:18.864 19300-19300/com.example.administrator.individualresume E/基类状态: false
此时需先判BaseActivity关否,没关则执行对话框操作;否不执行。如下:
if (!BaseActivity.this.isFinishing()) {
// 对话框操作
}
方案三
可于OnCreateDialog()
中创Dialog,让系统管理对话框。