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

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的使用简介以及使用心得)