LeakCanary源码分析第一讲

LeakCanary源码分析第一讲

本文将分析LeakCanary源码,介绍LeakCanary核心组件以及LeakCanary注册流程。如果你还不知道LeakCanary是什么,那么请一定要看这篇文章:LeakCanary让Android内存泄漏无处遁形

LeakCanary是Android内存泄漏检测工具,能够将内存泄漏在开发的过程中就暴露出来。

LeakCanary核心组件

LeakCanary-class-diagram上面的类图可以分为三层来看,第一层包括ActivityRefWatcher、RefWatcher,第三层是Service,第二层是HeapDump.Listener它是用来衔接Watcher与Service的桥梁。

ActivityRefWatcher:它通过watchActivities方法将全局的Activity生命周期回调接口Application.ActivityLifecycleCallbacks注册到application。

注册给application的Activity生命周期回调接口,会在Activity的onDestroy方法调用时回调。这是在API14 ICE_CREAM_SANDWICH才引入的接口。

RefWatcher:它是LeakCanary核心中的核心,要知道RefWatcher的工作原理,你必须要先了解Java的引用类型。RefWatcher的工作就是触发GC,如果对象被回收,那么WeakReference将被放入ReferenceQueue中,否则就怀疑有泄漏(仅仅是怀疑),然后将内存dump出来,为接下来的深入分析做准备。

Java的引用类型包括:强引用(StrongReference),弱引用(WeakReference),软引用(SoftReference),虚引用也叫幽灵引用(PhantomReference)。关于Java引用类型本文不做详细讲解。

HeapDump.Listener与ServiceHeapDumpListener:ServiceHeapDumpListener实现了HeapDump.Listener接口。当RefWatcher发现可疑引用的之后,它将dump出来的Hprof文件通过listener传递到HeapAnalyzerService。

HeapAnalyzerService:它主要是通过HeapAnalyzer.checkForLeak分析对象的引用,计算出到GC root的最短强引用路径。然后将分析结果传递给DisplayLeakService

AbstractAnalysisResultService与DisplayLeakService:DisplayLeakService继承了AbstractAnalysisResultService。它主要是用来处理分析结果,将结果写入文件,然后在通知栏报警。

LeakCanary注册过程与触发过程分析

leakcanary_install_sequenceLeakCanary注册过程分析:其实就是将ActivityRefWatcher中的Application.ActivityLifecycleCallbacks接口注册到Application中,从方法的调用序列中可以清楚的看到,registerActivityLifecycleCallbacks就是整个注册的核心接口。

触发watch动作过程分析:当Activity的onDestroy调用的时候,Application会收到通知,然后调用lifecycleCallback.onActivityDestroyed()方法,最终RefWatcher的watch方法被触发,也就实现了Activity内存泄漏分析自动分析。

总结

本篇是LeakCanary源码分析第一篇,只是对核心组件以及主要流程进行简要介绍,后续的文章中将进行更为详细的讲解。



  copyright@黑月神话,转载请注明出处: vjson.com
本条目发布于 2015年12月26日。属于 Android高级分类。 作者是heisedeyueya
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值