记录内存泄漏解决的经验总结
2017-02-08 15:44
337 查看
内存泄漏的问题,是一个老生常谈的问题,这里不多说,虽然网上解决的思路一大把,但是我把我自己的解决过程记录一下,解决方法当然可以百度就出来了,这里不过多记录。
1.使用Leakcanary,简单使用配置如下:
2.使用AS的内存分析工具进行内存泄漏检查,使用过程如下
1)运行app,然后选择查看运行内存,如下图
1)
2)点击红线所指向的按钮,然后会出现如下图所示效果:
3)稍等一分钟左右就会在AS中出现如下内容:
4)上面就是此时app占用内存的情况分析了,当然初看比较乱,我们要进行筛选,如下图:
首先红色箭头选中view树结构,然后黄色箭头选择你自己的包名内的文件,这时候就会看到圆圈圈中的内容了,发现了没有不是1或者0,说明这里有内存泄漏,需要修改。好了,然后我选择SquareView这个进行分析,为什么是这个而不是activity或者fragment呢?因为activity和fragment中存在泄漏是由于里面的view引起的,点击后看右侧图,再点击后看下面的图,蓝绿色的箭头指示位置就是具体是什么造成的内存不能够释放。到此就可以根据具体位置进行具体解决了。
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引起的,点击后看右侧图,再点击后看下面的图,蓝绿色的箭头指示位置就是具体是什么造成的内存不能够释放。到此就可以根据具体位置进行具体解决了。
相关文章推荐
- 内存泄漏的检测、定位和解决经验总结
- 内存泄漏的检测、定位和解决经验总结
- 内存泄漏的检测、定位和解决经验总结
- 内存泄漏的检测、定位和解决经验总结
- 内存泄漏的检测、定位和解决经验总结
- 内存泄漏的检测、定位和解决经验总结
- SQL Server 2005 一千万条以上记录分页数据库优化经验总结
- SQL Server 2005 一千万条以上记录分页数据库优化经验总结(转载)
- 经验总结系统文件无法打开故障解决方法
- [经验总结]解决Perl读取utf-8编码文件的问题
- 布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
- php + mysql 获取数据库中的记录(特别是高效的分页功能) 完全个人经验总结,仅供参考!
- [经验总结]解决DB2 9.5.2中用户认证的问题(SQL30082N)
- [经验总结]解决db2 bufferpool不足的问题
- [经验总结]std::string的警告信息不能消除的解决办法
- 小型网站编写经验总结、出现的问题及解决办法总汇
- [经验总结]解决Ubuntu系统中deb包循环依赖的问题
- "ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小"的解决,总结一下oracle开发的小经验
- [经验总结] 用VIM的缩进功能解决一个编译错误
- ORA-01122;ORA-01110;ORA-01207问题解决经验总结