窗体泄漏
最近新发布的版本中出现了 Crash,看 log 中是 Window Leaked,下面提供一下解决方案
原因
关于窗体泄漏的原因很简单。当我们在 Activity 上去构建一个置于 Activity 之上的 Dialog 或者 PopupWindow 时,这个窗口会依赖于 Activity。如果在浮窗没有被 dismiss 时,Activity 被 finish,就会出现 Window Leaked。知道了问题原因,就很好解决了。
解决方案
共有两种解决思路,第一种是手动做一个判断处理。第二种是使用 onCreateDialog 方法让系统去管理。
手动处理
手动处理也很方便,就是我们对它做一个判断就可以了。
@Override
protected void onDestroy() {
super.onDestroy();
// 处理内存泄漏中的窗体泄漏问题,即:位于Activity之上的窗体依附于Activity展示(如Dialog、Popup等),在它们还在时,依附的Activity没了引起
if (progressDialog != null) {
progressDialog.dismiss();
}
}
系统管理
在 Activity 中重写 onCreateDialog 方法,通过该方法让系统对其管理
@Override
protected Dialog onCreateDialog(int id) {
Dialog dialog = new Dialog(this);
return dialog;
}
这里简单记录一下问题处理