Android 内存泄漏是一个十分头疼的事情。LeakCanary是一款开源软件,主要作用是检测 Android APP 内存泄露。比起以前的 MAT 工具,LeakCanary 有着十分强大的功能,能够在程序发送内存泄漏的时候提示通知,而且学习成本低。同时提供 log 和 hrpof 日志,便于开发者解决问题。
Paste_Image.png
什么是内存泄露?
一些对象有着有限的生命周期。当这些对象所要做的事情完成了,我们希望他们会被回收掉。但是如果有一系列对这个对象的引用,那么在我们期待这个对象生命周期结束的时候被收回的时候,它是不会被回收的。它还会占用内存,这就造成了内存泄露。持续累加,内存很快被耗尽。
如何使用LeakCanary?
1.添加依赖
dependencies {
//leakcanary
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1'
// or 1.4-beta1
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
// or 1.4-beta1
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
}
2.Application中调用
public class ExampleApplication extends Application {
@Override public void onCreate() {
super.onCreate();
LeakCanary.install(this);
}
}
LeakCanary使用关键步骤?
1.通过 Bugsnag, Crashlytics 或者 Developer Console 等统计平台,了解 OutOfMemoryError
情况。
2.重现问题。为了重现问题,机型非常重要,因为一些问题只在特定的设备上会出现。为了找到特定的机型,你需要想尽一切办法,你可能需要去买,去借,甚至去偷。 当然,为了确定复现步骤,你需要一遍一遍地去尝试。一切都是非常原始和粗暴的。
3.在发生内存泄露的时候,把内存 Dump 出来。具体看这里。
4.然后,你需要在 MAT 或者 YourKit 之类的内存分析工具中反复查看,找到那些原本该被回收掉的对象。
5.计算这个对象到 GC roots 的最短强引用路径。
6.确定引用路径中的哪个引用是不该有的,然后修复问题。