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的通知,然后我们点击通知就会跳到详情的页面:
页面示例图如下:
到此此控件的介绍结束了。