LeakCanary内存泄露检测

2018-03-28  本文已影响56人  AJI大侠
  1. LeakCanary简介
  1. 内存泄漏简介
  1. LeakCanary接入
 dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'

    // 添加leakcanary相关的依赖
    // 在release版本中,使用的是LeakCanary的no-op版本,也就是没有实际代码和操作的Wrapper版本
    // 只包含LeakCanary和RefWatcher类的空实现,这样不会对生成的APK包体积和应用性能造成影响
    debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
    releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
}
public class FFApplication extends Application
{
    @Override
    public void onCreate()
    {
        super.onCreate();
        if (LeakCanary.isInAnalyzerProcess(this))
        {
            return;
        }
        LeakCanary.install(this);
    }
}

这样我们就完成了一个项目的LeankCanary的简单接入

  1. LeakCanary检测
    下面我们以常见内存—单例造成的内存泄露为例进行实践
public class TestManager
{
    //单例静态特性使得单例的生命周期和应用的生命周期一样长
    private static TestManager instance;
    private Context context;

    /**:
     * 传入的是Application的Context,则生命周期和单例生命周期一样长;
     * 传入的是Activity的Context,由于该Context和Activity的生命周期一样长,当Activity退出的时候它的内存不会被回收,因为单例对象持有它的引用;
     */
    private TestManager(Context context) {
        this.context = context;
    }

    public static TestManager getInstance(Context context) {
        if (instance == null) {
            instance = new TestManager(context);
        }
        return instance;
    }
}

5.检测消息通知

  1. LeakCanary原理
  1. 对于项目的好处
图片.png
上一篇下一篇

猜你喜欢

热点阅读