LeakCanary的简单使用

2018-08-23  本文已影响316人  Frank_Kivi

Android开发中一个不可绕过的东西——内存泄漏。如果确认在某个页面发生了内存泄漏,可以dump内存,使用工具来分析,有兴趣的同学可以参阅 Android内存优化方法——以Handler内存泄漏为例。但是问题难在如何第一个发现内存泄漏,这里推荐一个强大的工具:leakcanary.
按照官方的说明,只需要简单的两步:

  1. 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'
}
  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的内存泄漏警告。
当然,这只是最简单的使用方式。如果想要更深入的了解,请参阅官方文档。

上一篇下一篇

猜你喜欢

热点阅读