内存泄露在普通功能测试中相对难以发现,但泄露到一定程度造成的 OOM (内存超出限制,应用被强退)会给用户带来很明显的 app 不稳定的感觉,因此必须加强监测。这次 doctorq 给我们介绍了 LeakCanary 这款能有效检测内存泄露的软件,Testerhome Android 官方客户端也有在用哦!
添加LeakCanary依赖包
在主模块app下的build.gradle下添加如下依赖:
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
开启LeakCanary
添加Application子类
首先创建一个ExampleApplication,该类继承于Application,在该类的onCreate方法中添加如下代码开启LeakCanary监控:
LeakCanary.install(this);
在配置文件中注册ExampleApplication
在AndroidManifest.xml
中的application
标签中添加如下信息:
android:name=".ExampleApplication"
这个时候安装应用到手机,会自动安装一个Leaks应用,如下图:
制造一个内存泄漏的点
建立一个ActivityManager
类,单例模式,里面有一个数组用来保存Activity
:
DetailActivity
中的onCreate
方法中将当前activity
添加到ActivityManager
的数组中:DetailActivity
的onCreate
的方法,然后就将当前activity
添加到了数组中,当返回时,我们没把他从数组中删除。再次进入的时候,会创建新的activity
并添加到数组中,但是之前的activity
仍然被引用,无法释放,但是这个activity
不会再被使用,这个时候就造成了内存泄漏。我们来看看LeakCanary
是如何报出这个问题的。
最后一行的 leaks DetailActivity instance :具体泄露的对象。很明确说明了是一个 DetailActivity 的实例。
用户名:游客 发布时间:2015年12月14日
用户名:2411976021@qq.com 发布时间:2015年11月30日
用户名:admin@admin.com 发布时间:2015年11月27日
用户名:admin@admin.com 发布时间:2015年11月27日