Android内存泄漏检测工具---LeakCanary

2018-01-26  本文已影响21人  PlutoWnn

前言:在Android开发中我们总是遇到这种那种的内存泄漏的问题,基于这种问题我们可以用Android内存泄漏工具Leak Canary工具来检测。

一:首先我们需要在主项目的build.gradle里面配置依赖:

代码示例:

debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3'

二:在application里面初始化配置

代码示例如下:

private static RefWatcher mRefWatcher;

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

public static RefWatcher getRefWatcher() {
    return mRefWatcher;
}

三:最后在AndroidManifest里面配置:

把我们刚才定义的application应用在AndroidManifest里面:
代码如下:

android:name=".ExampleApplation"

四:最后我们测试吧

新建两个Activity一个MainActivity和一个LeakActivity,在MainActivity里面新建一个点击事件跳转到LeakActivity,在LeakActivity里面我们存入一个不能释放的activity。

MainActivity里面代码如下:

    findViewById(R.id.bt).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MainActivity.this, LeakActivity.class);
            startActivity(intent);
        }
    });

也就是一个跳转事件。

LeakActivity里面代码如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_leak);
    ActivityMgr.getInstance().addActivity(this);
}

ActivityMgr是一个单利,存储一个activity并不释放。

代码示例如下:

private static ActivityMgr sInstance = new ActivityMgr();
List<Activity> mActivities = new ArrayList<>();

private ActivityMgr() {
}

public static ActivityMgr getInstance() {
    return sInstance;
}

public void addActivity(Activity activity) {
    mActivities.add(activity);
}

public void removeActivity(Activity activity) {
    mActivities.remove(activity);
}

最后我们运行程序,点击button跳转到LeakActivity,然后再返回MainActivity.这是过个几秒钟就会出现页面leak的通知,然后我们点击通知就会跳到详情的页面:
页面示例图如下:

Screenshot_2018-01-26-16-12-49-134_com.example.administrator.leakcanarydemo.png

到此此控件的介绍结束了。

上一篇下一篇

猜你喜欢

热点阅读