LeakCanary的简单使用
2018-08-23 本文已影响316人
Frank_Kivi
Android开发中一个不可绕过的东西——内存泄漏。如果确认在某个页面发生了内存泄漏,可以dump内存,使用工具来分析,有兴趣的同学可以参阅 Android内存优化方法——以Handler内存泄漏为例。但是问题难在如何第一个发现内存泄漏,这里推荐一个强大的工具:leakcanary.
按照官方的说明,只需要简单的两步:
- In your build.gradle:
dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.1'
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.6.1'
// Optional, if you use support library fragments:
debugImplementation 'com.squareup.leakcanary:leakcanary-support-fragment:1.6.1'
}
- In your Application class:
public class ExampleApplication extends Application {
@Override public void onCreate() {
super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
return;
}
LeakCanary.install(this);
// Normal app init code...
}
}
然后我们写一段代码简单模拟一下。
package com.example.lenovo.testjson;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.MotionEvent;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Test.getInstance().setContext(this);//把对象作为参数传递给单例,让单例持有当前对象的引用 。
startActivity(new Intent(this, Main2Activity.class));
finish();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.i(TAG, "onTouchEvent: " + event.getAction());
return super.onTouchEvent(event);
}
}
这段代码之后就会在通知栏中弹出leakCanary的内存泄漏警告。
当然,这只是最简单的使用方式。如果想要更深入的了解,请参阅官方文档。