使用leakcanary分析程序中的内存泄露

      如果程序已经发生了内存泄露甚至导致内存溢出OOM,需要迅速定位问题点,以便分析解决。(其实就是今天我们即将上线的app发生的情况),
我觉得这也是大部分APP都会遇到的情况,现在我也不想听那么多理论原因了,我就知道我的程序卡死了,看LOG出现了 Out Of Memory的ERROR,

该如何定位分析问题呢?
我们今天的工具就出现了,即LeakCanary!内存泄露分析利器。
又是Square公司出品的,他们公司出过啥?OkHttp,Picasso.................
首先,这里是leakcanary的github地址:
https://github.com/square/leakcanary。

使用步骤:

1、在build.gradle里添加如下引用:
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1' // or 1.4-beta2
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1' // or 1.4-beta2
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1' // or 1.4-beta2


2、在程序的Application类里添加如下代码:
public static RefWatcher getRefWatcher(Context context) {
    LeakDemoApplication application = (LeakDemoApplication) context.getApplicationContext();
    return application.refWatcher;
}

private RefWatcher refWatcher;

@Override
public void onCreate() {
    super.onCreate();
    refWatcher = LeakCanary.install(this);
}
即在Application的onCreate()方法里,调用LeakCanary.install(this)方法,得到方法返回的RefWatcher对象,用于给其他Activity监控内存泄露使用。


3、在需要被监控的Activity、Fragment里的onDestroy()方法里添加如下代码:
3.1,如果是Activity的话:
@Override
protected void onDestroy() {
    super.onDestroy();
    /**
     * 在Activity的onDestroy()里添加如下代码即可对该Activity的内存泄露问题进行监控。
     * 一般我们的项目都会有一个BaseActivity,在BaseActivity里onDestroy()方法里添加如下代码即可监控该App所有的Activity的内存泄露问题。
     */
    RefWatcher refWatcher = LeakDemoApplication.getRefWatcher(this);
    refWatcher.watch(this);
}
3.2,如果是Fragment的话:
@Override
public void onDestroy() {
    super.onDestroy();
    RefWatcher refWatcher = LeakDemoApplication.getRefWatcher(getActivity());
    refWatcher.watch(this);
}
他们监控的都是Activity.


4、经过以上三步,集成已经完毕,编译运行代码即可,如果出現内存泄露情况会发出通知消息,点击就会看到泄露的原因。


目前leakcanary一次只能在一个Activity中检测出一个内存泄露问题,所以如果你的Activity有多个内存泄露问题,需要先将这个问题解决掉,然后再次运行测试,切换Activity,查看有无剩余的内存泄露问题。切记不要以为解决了一个内存泄露提示,你的Activity就没有问题了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值