内存泄漏的问题,是一个老生常谈的问题,这里不多说,虽然网上解决的思路一大把,但是我把我自己的解决过程记录一下,解决方法当然可以百度就出来了,这里不过多记录。
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引起的,点击后看右侧图,再点击后看下面的图,蓝绿色的箭头指示位置就是具体是什么造成的内存不能够释放。到此就可以根据具体位置进行具体解决了。
新闻热点
疑难解答