内存泄漏分析工具

android 内存泄漏分析工具 LeakCanary

内存泄漏的原因:
某个对象在释放的时候由于被其他对象持有,而没有释放,造成了内存泄漏
在手机上即可查看问题即引用关系, MAT需要分析HeapDump, 找Path To GC Roots
在app的build.gradle中加入依赖:

dependencies {
    debugCompile 'com.squareup.leakcanary:leakcancary-android:1.3.2'
    releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
    testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1'
}

然后在Application中加入类似如下的代码:

public class ExampleApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        LeakCanary.install(this);
    }
}

leakcancary其实在本机上做了HeapDump,然后对生成的hprof分析文件,进行结果展示。
和手工进行MAT分析步骤基本一致。

因为存在debugCompilereleaseCompile``testCompile所有不影响对外版的APK
目前只可以一次报一个泄漏问题

想要检测更多?

获取一个RefWatcher,用来后续监控可能发生泄漏的对象

public class ExampleApplication extends Application {
    private static RefWatcher sRefWatcher;

    @Override
    public void onCreate() {
        super.onCreate();
        sRefWatcher = LeakCanary.install(this);
    }

    public static RefWatcher getRefWatcher() {
        return sRefWatcher;
    }
}

当要去监控某个可能存在内存泄漏的对象(myContext)时:

ExampleApplication.getRefWatcher().watch(myContext);

监控fragment

public class CustomFragment extends Fragment {
    @Override
    public void onDestroy() {
        super.onDestroy();
        ExampleApplication.getRefWatcher().watch(this);
    }
}

Fragment和Activity实例一样可能持有大量的视图以及视图需要的资源(bitmap),可以在
Fragment onDestroy方法中加入实现