我们经常在 APP 中网络加载时,会显示一个加载 ProgressDialog ,然后数据加载成功之后,我们一般会将 ProgressDialog dismiss()这是正常的情况,不会有任何问题。
我最近在我的项目中发现,进行会出现 dialog leak 的字眼,出现的时机是当我在加载数据的时候,我关闭了当前 Activity 或者跳转到其他 Activity ,那么此时就会出现这种情况。
在 Activity 发生跳转的时候,或者按下 home 键之后,会调用当前 Activity 中的 onSaveStateInstance() 方法,这个方法是用于在 Activity 被回收时做的一些资源保存的工作。那么为什么会被调用呢?
简单理解,因为当 Activity 发生跳转之后,或者按下 home 键之后,系统并不知你什么时候回到这个 Activity ,因此这个方法会被系统调用。
一般会在 BaseActivity 中对 ProgressDialog 进行 dismiss 操作。
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if(mLodingProgressDialog!=null)
//onSaveInstanceState 调用 dismiss 防止内存泄漏
mLodingProgressDialog.dismiss();
}
}