Android内存泄漏检测-LeakCanary

发表于:2015-12-21 10:52

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:王吉华    来源:51Testing软件测试网采编

  前言:
  Android内测泄漏是比较常见的问题,在没有造成OOM之前,在测试过程中,也会经常性的忽略这个问题,但在android碎片化严重的今天,还是存在很多内测泄漏造成OOM的问题在反馈。那么如何检测内存泄漏呢,当然我们可以通过MAT这些工具来排查哪些页面会出现内存泄漏,那么问题来了,测试周期本来就很紧张,全页面覆盖耗费很大,不全面覆盖又会有一些漏缺,那么有没有一种嵌入到日常测试过程,发现内存泄漏即提示并且有定位的方法,无意中在git上看到一个开源项目:LeakCanary,本文就是对LeakCanary具体的实践。
  实践:
  1.素材:
  编辑器:Android Studio(AS)
  项目:阅读具体项目源码
  2.具体实现
  2.1编辑build.gradle
  需要加入具体依赖
  debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
  releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
  这里需要说明一下,gradle依赖需要翻墙,不翻墙很有可能失败,最好用公司网络(虽然说失败过很多次,但还是可以成功的)或者vpn,声明后重新构建去下载依赖
  2.2编辑Application.class开启LeakCanary
  该类即androidManifest中声明的application类(自定义的会居多,具体可以从androidManifest查看)
  在复写的oncreate()方法中加入如下代码:
  LeakCanary.install(this);
  2.3安装应用到手机
  在安装阅读app的同时,会在手机中安装一个监控app
  2.4测试apk
  此时就可以开始日常测试啦,若有内测泄漏,会有toast提示正在dump数据
  打开leak app就可以看到一条具体的内测泄漏信息(这里在toast提示之后会有一定的延迟,过一会儿才会在leak app显示)
  这里具体定位到具体tread和activtiy,你还可以借助heap dump数据进行mat工具分析
  这里的例子是引用的对象没有释放造成的MainGridActivity页面的内存泄漏
  2.5可share一些数据文件
  这里提供share heap dump文件
  从git的源码可以看到,dump的.hprof文件在sdcard/Download/leakcanary目录下,你也可以通过adb shell下进行查看,并且pull到pc端来进行分析
  总结:
  到这里,具体的实践就差不多了,此工具可在日常测试过程中同时监控内存泄漏的情况,并有数据可以用来分析,更加符合用户场景,覆盖率更高,不错的一个工具,具体项目中可以用的到。这里只是简单在实际项目中试用,具体的原理和具体的内存泄漏分析还需要继续实践。若有具体实践过的同学也可以多多交流下哈。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号