您的位置:首页 > 其它

记录内存泄漏解决的经验总结

2017-02-08 15:44 337 查看
          内存泄漏的问题,是一个老生常谈的问题,这里不多说,虽然网上解决的思路一大把,但是我把我自己的解决过程记录一下,解决方法当然可以百度就出来了,这里不过多记录。

          1.使用Leakcanary,简单使用配置如下:

dependencies {
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
}
           使用当然也非常简单,在application的oncreate方法中加入如下代码就好了:

LeakCanary.install(this);
         这样就可以在运行app的时候检查是否有内存泄漏了。但是有些时候会发现,报的内存泄漏发生的位置很尴尬,为系统控件等等,一眼看到后觉得不是我们的代码的问题,这个时候就需要用AS的自带工具进行内存泄漏检查了。

         2.使用AS的内存分析工具进行内存泄漏检查,使用过程如下

                 1)运行app,然后选择查看运行内存,如下图

             

1)

              2)点击红线所指向的按钮,然后会出现如下图所示效果:

             


            3)稍等一分钟左右就会在AS中出现如下内容:

             


4)上面就是此时app占用内存的情况分析了,当然初看比较乱,我们要进行筛选,如下图:



    首先红色箭头选中view树结构,然后黄色箭头选择你自己的包名内的文件,这时候就会看到圆圈圈中的内容了,发现了没有不是1或者0,说明这里有内存泄漏,需要修改。好了,然后我选择SquareView这个进行分析,为什么是这个而不是activity或者fragment呢?因为activity和fragment中存在泄漏是由于里面的view引起的,点击后看右侧图,再点击后看下面的图,蓝绿色的箭头指示位置就是具体是什么造成的内存不能够释放。到此就可以根据具体位置进行具体解决了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: