美文网首页
Leak Canary的使用简介以及使用心得

Leak Canary的使用简介以及使用心得

作者: yuezhusust | 来源:发表于2018-03-21 18:18 被阅读0次

    1. 什么是 Leak Canary ?

            Leak Canary 是Square 家推出的开源的内存泄漏跟踪分析工具,项目的GitHub地址:https://github.com/square/leakcanary。话说 Square家的好东西可真不少,还有Retrofit    OkHttp  Picasso  Dagger 这些好用的库。

    2.  为什么要用 Leak Canary ?

          在Leak Canary 发布之前,遇到内存泄漏的问题,只能依靠Eclipse 的MAT工具进行分析处理,那个分析难度啊,分析过的人都知道,一句话概括:费时费力。

          Leak Canary发布之后,内存泄漏的检测简直太简单了,如何简单呢,请看下面Leak Canary的使用。

    3.  Leak  Canary 的使用

         第一步: 在项目工程的build.gradle里面加入应用编译:

    compile  'com.squareup.leakcanary:leakcanary-android:1.4-beta2'

    这里要说明一下,项目打包如果分debug和release的话,这个引入要根据debug or release进行修改。我这里面是直接引入debug的。

         第二步: 在应用的application 的onCreate()方法中加入以下代码:

    super.onCreate();

    if (LeakCanary.isInAnalyzerProcess(this)) {

    // This process is dedicated to LeakCanary for heap analysis.

    // You should not init your app in this process.

        return;

    }

    LeakCanary.install(this);

          第三步    打包。 安装生成的apk,运行,第一次运行之后会生成Leaks 图标的内存泄漏检测工具。然后,运行app, 如果应用出现内存溢出,Leak  Canary 就会弹出提示通知栏,并生成分析文件和日志显示,如下图

    点击文字,会有详细一点的信息,如下图:

          这个内存泄漏的信息如何理解呢,第一行的mContext 因为是静态变量,给它的赋值是赋值了Activity对象,而没有赋值给它Application 的值,导致当该Activity已经destory之后,java 的虚拟机要回收该Activity对象,但是因为mContext对象为static类型,它引用这该Activity对象,导致该Activity对象不能被回收,解决方法为给mContext赋值为Application的 Context。

    是不是很简单,而且Leak Canary还可以把捕获的日志分享为文字或者堆日志文件。如下图所示:

    4.使用心得

    一.  Leak Canary虽然好用,但是我们平常写代码还是要注意代码的写法,防止内存泄漏的发生。

    二.  如果有些手机安装带有Leak Canary 的安装包之后能抓取内存泄漏的日志,但是不能分析,提示Leak Canary error,解决方法是换别的手机试试。

    相关文章

      网友评论

          本文标题:Leak Canary的使用简介以及使用心得

          本文链接:https://www.haomeiwen.com/subject/ujxnqftx.html