LeakCanary

本文介绍了一个复杂的全手工排查内存泄露过程,包括使用Bugsnag、Crashlytics等工具定位问题,利用MAT或YourKit进行内存分析,并最终通过LeakCanary等库自动监测和修复内存泄露。
对战内存泄露

排查内存泄露是一个全手工的过程,这在 Raizlabs 的 Wrangling Dalvik 系列文章中有详细描述。

以下几个关键步骤:

  1. 通过 BugsnagCrashlytics 或者 Developer Console 等统计平台,了解 OutOfMemoryError 情况。

  2. 重现问题。为了重现问题,机型非常重要,因为一些问题只在特定的设备上会出现。为了找到特定的机型,你需要想尽一切办法,你可能需要去买,去借,甚至去偷。 当然,为了确定复现步骤,你需要一遍一遍地去尝试。一切都是非常原始和粗暴的。

  3. 在发生内存泄露的时候,把内存 Dump 出来。具体看这里

  4. 然后,你需要在 MAT 或者 YourKit 之类的内存分析工具中反复查看,找到那些原本该被回收掉的对象。

  5. 计算这个对象到 GC roots 的最短强引用路径。

  6. 确定引用路径中的哪个引用是不该有的,然后修复问题。

很复杂对吧?

如果有一个类库能在发生 OOM 之前把这些事情全部都搞定,然后你只要修复这些问题就好了,岂不妙哉!



public class ExampleApplication extends Application {

private RefWatcher mRefWatcher;

  @Override public void onCreate() {
    super.onCreate();
   mRefWatcher = LeakCanary.install(this);
  }

public RefWatcher refWatcher() {
		return mRefWatcher;
	}

}

act销毁的时候检测它

  @Override
    protected void onDestroy() {
        super.onDestroy();
getApplication().refWatcher().watch(this);
}

fragment销毁时检测它

 @Override
	public void onDestroy() {
		super.onDestroy();
			getActivity().getApplication().refWatcher().watch(this);
	}

 

转载于:https://my.oschina.net/carbenson/blog/812698

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值