LeakCanary简介
android stdio 接入方式
- 1.android stdio 将工程切到android模式,在build.gradle(module模式下)添加依赖:
dependencies {
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
}
- 2.要监控Activity泄露,自定义Application
public class MyApplication extends Application {
private static final String TAG = "MyApplication";
public static RefWatcher getRefWatcher(Context context) {
MyApplication application = (MyApplication) context.getApplicationContext();
return application.refWatcher;
}
private RefWatcher refWatcher;
@Override
public void onCreate() {
Log.i(TAG,"onCreate first called............");
super.onCreate();
refWatcher = LeakCanary.install(this);
}
}
- 3.在AndroidManifest.xml配置文件中声明MyApplication
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
public class SecondActivity extends AppCompatActivity {
static Demo sDemo;
private static final String TAG = "SecondActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i(TAG,"onCreate() is called!!!!!!!!!!!!!!!!");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
if (sDemo == null) {
sDemo = new Demo();
}
finish();
}
class Demo {
private ArrayList<String> a = new ArrayList<String>();
public Demo() {}
}
}
内存泄露的场景举例