利用 LeakCanary 来检查 Android 内存泄漏

LeakCanary简介

  • LeakCanary是一款开源的内存泄露检测工具。开源代码被github托管。地址:https://github.com/SOFTPOWER1991/leakcanarySample_androidStudio
  • 有些对象只有有限的生命周期。当它们的任务完成之后,它们将被垃圾回收。如果在对象的生命周期本该结束的时候,这个对象还被一系列的引用,这就会导致内存泄漏。随着泄漏的累积,app将消耗完内存。

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">
  • 4.一个测试的例子
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() {}
    }
}
  • 5.执行后结果:

内存泄露的场景举例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值