[leakcanary]内存泄露检测

leakcanary是square公司出的android内存泄露框架,相比起MAT工具,它使用起来非常简便,在android studio中导入很方便。它可以很直观通过通知,告诉你内存泄露产生在哪里。

导入方法:配置Module:app -> build.gradle文件,添加以下依赖

dependencies { debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta1' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta1' }

使用方法:在application的onCreate方法中初始化

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        LeakCanary.install(this);
    }
}

以下是笔者在使用过程中的示例图片

在产生内存泄露的时候,它自动弹出通知。可以看到,在最底下的一行是产生内存泄露的地方,意思是:GoodsDetailActivity这个实例产生内存泄露。

我们从下往上看去,可以了解到产生内存泄露的原因,在倒数第二行提示mContext,再继续往上看有mInstance,这是笔者在写PopGoodsdetailSpec这个类的时候使用的单例。看到这里,就可以很清晰的明白,哦!原来是因为使用了单例,对activity持有context的引用,导致activity不能内GC回收,从而产生的内存泄露。这时候再去解决这个单例造成的内存泄露就可以了。

如果你还不知道context的作用,为什么context持有会造成内存泄露,单例的生命周期,推荐看此文:
[Android源码分析-全面理解Context Context]http://blog.csdn.net/singwhatiwanna/article/details/21829971

[Android Context完全解析,你所不知道的Context的各种细节
]http://blog.csdn.net/guolin_blog/article/details/47028975

你可能感兴趣的:(android,内存泄露,Square)