如何在Android Studio中使用LeakCanary检测内存泄露

内存泄露检测是项目性能优化不可避免的问题,只有解决内存泄露问题才能从根本上解决OOM。在Eclipse中提供Mat工具来检测内存泄露,但是使用较为麻烦,界面也不是很直观。对于有耐心,有想法的,也是可以尝试了解一下。知道Leak的出现,为内存泄露检测带来了福音。

1.什么是LeakCanary

LeakCanary

A memory leak detection library for Android and Java.

LeakCanary是一个Android和Java的内存检测库。

2.LeakCanary如何展示内存泄露信息

如果项目存在内存泄露,就会在状态栏或是一个单独的Leaks程序中显示内存泄露信息,提供一个造成内存泄露对象的引用路径

这个项目是在应用相应的回退之后分析是否存在内存泄漏,如果存在内存泄漏,将进行相应的分析并处理,若没有则不会,不能做到MAT或者studio中相应的实时查看内存状态的,并且检测具有很大的延时,最少10s。

3.LeakCanary的Github地址:

https://github.com/square/leakcanary

4.在Android Studio中使用LeakCanary

引入LeakCanary有多种方法,我们直接远程依赖
* *Step 1: 配置bundle.gradle**

debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
//    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
    releaseCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
    testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'

【错误1:】截图如下: Failed to resolve: com.squareup.leakcanary:leakcanary-android
如何在Android Studio中使用LeakCanary检测内存泄露_第1张图片
这是因为我们是远程依赖leakcanary,而leakcanary项目放在jcenter() 和mavenCentral()架包库中
所以需要在在build中再加入如下代码,并 clean Build。

    allprojects {     
         repositories {         
              jcenter()  
         }  
      }   

如果仍不成功,需要添加

allprojects {   
          repositories {       
               jcenter() 
               mavenCentral()   
          }
       }  

Step2:在Application文件中配置

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...
  }
}

step3、应用安装
安装应用,在debug版本的apk安装后,会出现如下两个图标:左边的是自己应用的图标,右边是启动应用后退出,自动安装的leakCancayDe图标。
如何在Android Studio中使用LeakCanary检测内存泄露_第2张图片
【错误2】:但是有的人没有相应的图标,怎么办?

因为gradle设置错误的原因,上述build分别设置了debugCompile 和 releaseCompile,具体的区别这里不细说了,需要有一定的gradle功底,才能改修完成。这里给出的最简易的方案,适用于该产品在加入的leakCancy仅仅在测试的时候使用,而在release包中手动去除相应的代码:【解决当前问题,但是不提倡】
1、debug 和 release 引用相同的lib

     dependencies {
             debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
             releaseCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
       }
 2、使用compile 不再1区分debug 和 release
    dependencies {
             compile 'com.squareup.leakcanary:leakcanary-android:1.5'
       }

如果存在内存泄露,将会显示内存泄露的对象的引用路径。
推荐文章:
Android 内存泄漏分析利器——leakcanary
LeakCanary 中文使用说明
如何在Eclipse中使用LeakCanary
如何使用Mat检测内存泄露

你可能感兴趣的:(Android,Studio,内存泄露专栏)