下面是我在对Hello进行内存泄漏分析时发现总结的一些常见实例!希望大家平时开发时留意一下!特别是在使用内部类或者匿名内部类时特别注意一下
实例1:
View view1;//某实例view
View view2’//某实例view
View view3;//某实例view
View3.getViewTreeObserver().addOnGlobalLayoutListener(newOnGlobalLayoutListene()
{
@Override
public void onGlobalLayout() {
//在这里会因为view1,view2被OnGlobalLayoutListener所引用(本质是AttachInfo被引用)使得宿主fragment或者activity无法gc而导致内存泄漏
int width = view1.getWidth();
int width = view2.getWidth();
}
});
结果是频繁进入个人资料页是导致内存泄漏
实例2、把fragment注册到LinkdLet.addConnStatListener()中,在onDestrory中没有调用LinkdLet. removeConnStatListener()导致退出进入再推出再进入频繁操作而导致内存泄漏;
实例3、GiftLetl. regNewMsgHandler后,在退出fragment后虽然手动设为null,但是因为原来那个已经设置另一进程而导致内存泄漏实例4、内部类中使用宿主类变量(截图中是ListView的Adapter),而该变量又引用这MainActivity导致内存泄漏;如引用链
原作者:nemo211
|