内存泄露工具(leakcanary、Lint)的使用

前言

内存泄漏是开发当中常见的狗皮膏药,我们要想实现一个项目开发下来没有内存泄漏,那是完全不可能的。即使你是大牛级别的人物,也难免会在忙碌的敲代码中出现一些纰漏。常见的检测内存泄漏的工具 有Allocation Tracker(Android Studio)工具、Heap Snapshot工具、Heap Viewer工具、LeakCanary工具、MAT工具、TraceView工具(Device Monitor) 、Lint 等等,考虑到工具的实用性,在此就介绍两种工具,那就是LeakCanary工具 和Lint 工具

下面是各种工具的使用文档
这里写图片描述

已经上传到 http://download.csdn.net/download/baidu_38477614/10170276

里面是各种工具的详细使用文档。为了方便,以下介绍两种我们开发这最喜爱的内存泄漏检测工具,那就是square第三方的 leakcanary ,只要集成好了,就能自动检测内存泄漏,但是本人更喜欢使用AS 中的Lint 工具 ,非常强大,比 leakcanary 更为强大。那么我们就先比较以下二者的功能

leakcanary

这里写图片描述
Square公司
可以直接在手机端查看内存泄露的工具
实现原理:本质上还是用命令控制生成hprof文件分析检查内存泄露。
然后发送通知。
功能:仅仅检测内存泄漏,告诉我们位置

Lint分析 工具
Lint是Android Studio 自带的很强大的一种分析工具,它的功能远远多于leakcanary

他能为我们提供什么?

    检测资源文件是否有没有用到的资源。
    检测常见内存泄露
    安全问题SDK版本安全问题
    是否有费的代码没有用到
    代码的规范---甚至驼峰命名法也会检测
    自动生成的罗列出来
    没用的导包
    可能的bug

本人最喜欢使用Lint分析工具 ,强大更好使用

现在介绍如何继承第三方的 leakcanary

集成leakcanary

官方leakcanary 的gitHub地址https://github.com/square/leakcanary

1.添加LeakCanary依赖包
这里是至今最新的版本,可以访问上方的GitHub地址获取

 debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.4'
  releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'

这里写图片描述

2.首先创建一个ExampleApplication,该类继承于Application,在该类的onCreate方法中添加如下代码开启LeakCanary监控:

public class ExampleApplication extends Application {

  @Override public void 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);
    // Normal app init code...
  }
}

这里就集成结束了,这样你就可以在debug的时候它会安装一个图标自动监测内存泄漏了,下面是他在桌面生成的图标,一个小鸡
这里写图片描述
当检测到内存泄漏的时候它会发送一个通知 和一个弹窗,很体贴的告诉你位置这里写图片描述

如果你正在进行单元测试,想要关闭leakcanary 那么请在 builder.gradle 中添加

// Ensure the no-op dependency is always used in JVM tests.
configurations.all { config ->
  if (config.name.contains('UnitTest')) {
    config.resolutionStrategy.eachDependency { details ->
      if (details.requested.group == 'com.squareup.leakcanary' && details.requested.name == 'leakcanary-android') {
        details.useTarget(group: details.requested.group, name: 'leakcanary-android-no-op', version: details.requested.version)
      }
    }
  }
}

作为开发者,我们很少用到。

Lint分析工具

我们怎么在Android studio 中 开始使用 lint 分析工具
这里写图片描述

接下来会弹出 以下窗体

这里写图片描述
点击 ok AS 就帮我们开始分析了

这里写图片描述

这里是所有的好东西 包括了以下几点

检测资源文件是否有没有用到的资源。
    检测常见内存泄露
    安全问题SDK版本安全问题
    是否有费的代码没有用到
    代码的规范---甚至驼峰命名法也会检测
    自动生成的罗列出来
    没用的导包
    可能的bug

这里写图片描述
是不是很强大,是不是很man 顿时觉着AS 好贴心哪,还有很多它会检测出来
例如驼峰命名法 比如

//你声明一个context
private Context mcontext ; 

他会检测出你代码不规范。还有很多功能 大家自己去测试一下吧。

我推荐大家使用Lint 分析工具,第三方的Leakcanary 简单,懒汉式追求,当然也很强大,但是一般的小公司里都在使用 Leakcanary ,这个完全靠大家兴趣。

上一篇讲了常见的内存泄漏的案例以及解决办法。地址http://blog.csdn.net/baidu_38477614/article/details/78874459

我会持续发布一些内存优化的博客,敬请期待。谢谢

猜你喜欢

转载自blog.csdn.net/baidu_38477614/article/details/78879158