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

来源:互联网 发布:网站模板源码免费下载 编辑:程序博客网 时间:2024/05/29 18:14

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

1.什么是LeakCanary

LeakCanaryA 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
这里写图片描述
这是因为我们是远程依赖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图标。
这里写图片描述
【错误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检测内存泄露

1 0
原创粉丝点击