瑞芯微Rockchip开发者社区
直播中

王静

7年用户 1543经验值
私信 关注
[经验]

对在Firefly-RK3288开发板上的Hello进行内存泄漏分析常见实例

下面是我在对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导致内存泄漏;如引用链

1.jpg

原作者:nemo211

更多回帖

发帖
×
20
完善资料,
赚取积分