android studio 使用leakcanary,如何在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,如何在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,如何在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,使用leakcanary)