内存泄漏检测库:LeakCanary
LeakCanary是Square公司基于MAT开源的一个工具,专门为Android开发的一个工具,用起来非常方便。。
Git地址:https://github.com/square/leakcanary
官方地址:https://square.github.io/leakcanary/
1、配置项目build.gradle
在build.gradle文件中添加依赖。注意有两个非常贴心,debugApi只在开发模式中包含功能代码,检测内存泄漏。releaseApi仅包含空方法,所以release版本不会影响用户的正常使用。
dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.8.1'
}最新版本已经不用开发者手动初始化,自动集成到App中。
2、初始化LeakCanary(废弃)
自定义Application,在onCreate()中安装LeakCanary。别忘了在AndroidManifest.xml中将application节点替换成自己的Application。
@Override
public void onCreate() {
super.onCreate();
LeakCanary.install(this);
}看到另有一种更严谨的安装方法:进行过滤操作,如果当前的进程是用来给LeakCanary进行堆分析的则返回,否则会执行LeakCanary的install()方法。
public void onCreate() {
super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
//此过程专用于LeakCanary进行堆分析。
//在此过程中,您不应该初始化您的应用程序。
return;
}
LeakCanary.install(this);
}安装好LeakCanary就可以为我们检测内存泄漏了,在运行过程中,如果APP发生内存泄漏就会提示并保存一些堆栈调用信息。方便我们追踪内存泄漏的源头。


3、借助RefWatcher分析内存泄漏
除了简单的安装LeakCanary,还可以通过RefWatcher对象来监控特定的Activity。得到RefWatcher,调用它的watch()方法,watch()方法的参数就是要监控的对象。发生内存泄漏的时候就会检测出并提示。
public class LeakApplication extends Application {
private RefWatcher refWatcher;
public void onCreate() {
super.onCreate();
refWatcher= setupLeakCanary();
}
/**
*安装初始化LeakCanary,返回一个RefWatcher实例
*/
private RefWatcher setupLeakCanary() {
if (LeakCanary.isInAnalyzerProcess(this)) {
return RefWatcher.DISABLED;
}
return LeakCanary.install(this);
}
/**
*静态方法获得Application全局RefWatcher实例
*/
public static RefWatcher getRefWatcher(Context context) {
LeakApplication leakApplication = (LeakApplication) context.getApplicationContext();
return leakApplication.refWatcher;
}
}相关博客:
《Android 源码系列之从源码的角度深入理解LeakCanary的内存泄露检测机制(上)》
《Android 源码系列之从源码的角度深入理解LeakCanary的内存泄露检测机制(中)》
