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

更多相关文章

  1. Android(安卓)Studio Error:Failed to resolve: com.android.sup
  2. Android利用webservices实现图片远程上传
  3. Android获取内存的不同方法总结
  4. cocos2d-x for android容易忘记的地方记录
  5. android linux 命令记录
  6. android 调用.net 的webservice .
  7. 让gradle常驻内存,加快项目构建速度
  8. Android之内存溢出(Out Of Memory)的总结
  9. android 缩放图片引起的内存溢出

随机推荐

  1. RecyclerView 到达顶部的另一种方式
  2. Android(安卓)studio中的错误Your projec
  3. Intent的详细解析以及用法
  4. AIDL跨进程通信
  5. Android(安卓)系统时间
  6. android cmd 命令
  7. WebKit 分析–for android - Braincol -
  8. Android(安卓)进程间通讯四种方式
  9. Launcher研究资料收集(4)--Appliction
  10. AOP在Android中最佳用法