问题的现象
自动化测试中反馈了一个页面存在内存泄漏的现象,几乎是必现,我们本地debug跑了一下 发现问题 确实存在
一看这个就明白了 是个匿名内部类导致的。
问题的定位
好在现在高版本的Android studio 内存这块做的已经很出色,不用像以前那样还要转hprof格式以后 用mat 分析 我们直接右键jump to source 就可以
一看 这不就是个dialog的 listener吗,这也会内存泄漏? 再看下 前面的 调用链,还和message有关系?
会不会是android stuido 误报呢?
再看看源码吧:
嗯? 这里一个setListener的操作 竟然还真的会和handler和message 有关系? 那看来 studio 没有误报呀 大概率就是这个地方了
怎么解决?
当然是先谷歌一番了,什么dialog dismiss, setOnDismissListener(null) 都试过了,好像并没有什么用 咋办?
android 匿名内部类的内存问题 遇事不决就 弱引用呀
static class CommentDelDialogDismissListener implements DialogInterface.OnDismissListener {
private final WeakReference<ForumPostDetailActivity> mActivity;
CommentDelDialogDismissListener(ForumPostDetailActivity activity) {
mActivity = new WeakReference<>(activity);
}
@Override
public void onDismiss(DialogInterface dialog) {
ForumPostDetailActivity activity = mActivity.get();
if (activity == null) {
return;
}
activity.continueVideoPlayerByVisiableRect();
}
}
是不是和标准的static class CustomHandler方法 很像。
运行之后 发现 内存泄漏的情况消失。问题解决