[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

发布了48 篇原创文章 · 获赞 49 · 访问量 9万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览