android 内存泄漏分析之二

一、单例类内存泄漏点

1、由于直接静态类context 引用context导致,用applicationContext好像还是会有内存泄漏

2、可以将此类变为 WeakReference类   通过

private T getInstance()

{
       if(null == instance || null == instance.get())

{

    instance = new WeakReference(new T)

}

return instance;

}


二、关于图片泄漏问题

可以参考

http://www.tuicool.com/articles/YVnYRv

对图片泄漏进行释放,注意链接中要判断是否为 BitmapDrawable对象

       if (imageView != null) {
            BitmapDrawable bd = (BitmapDrawable) imageView.getDrawable();
            rceycleBitmapDrawable(bd);
        }
语句强转有差错,需要首先判断对象释放为BitmapDrawable实例
imageview类一定要手动释放才有效!!!
三、关于inputmanager引起的内存泄漏问题,待续

四、对于用MAT 工具查看内存泄漏小技巧
1、通过histogram中 按照包名进行查询,逐一排查不同模块的内存泄漏问题
2、在Dominator Tree中查询的时候,可以通过 list by outcomming 找到对应的bitmap实际是从哪个类引用的,找到可能出现导致bitmap对象无法释放的我们的文件源头
3、可以通过不同时间段产生的**.hprof,在histogram模式下来进行对比两个文件的不同,查看本次相对于上次是否有缩小了内存占用









你可能感兴趣的:(性能分析)