LeakCanary源码分析第一讲
来源:互联网 发布:金九银十 数据 编辑:程序博客网 时间:2024/06/08 05:45
LeakCanary源码分析第一讲
本文将分析LeakCanary源码,介绍LeakCanary核心组件以及LeakCanary注册流程。如果你还不知道LeakCanary是什么,那么请一定要看这篇文章:LeakCanary让Android内存泄漏无处遁形
LeakCanary是Android内存泄漏检测工具,能够将内存泄漏在开发的过程中就暴露出来。
LeakCanary核心组件
上面的类图可以分为三层来看,第一层包括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注册过程分析:其实就是将ActivityRefWatcher中的Application.ActivityLifecycleCallbacks
接口注册到Application中,从方法的调用序列中可以清楚的看到,registerActivityLifecycleCallbacks
就是整个注册的核心接口。
触发watch动作过程分析:当Activity的onDestroy
调用的时候,Application会收到通知,然后调用lifecycleCallback.onActivityDestroyed()
方法,最终RefWatcher的watch方法被触发,也就实现了Activity内存泄漏分析自动分析。
总结
本篇是LeakCanary源码分析第一篇,只是对核心组件以及主要流程进行简要介绍,后续的文章中将进行更为详细的讲解。
- LeakCanary源码分析第一讲
- LeakCanary源码分析第二讲-RefWatcher详解
- LeakCanary源码分析第二讲-RefWatcher详解
- LeakCanary源码分析
- LeakCanary源码分析
- LeakCanary源码分析
- LeakCanary源码分析
- JobSchedule之源码分析-第一讲
- Kettle 4.2源码分析第一讲--Kettle 简介
- 内存泄露检测神器 -- LeakCanary源码分析
- LeakCanary从入门到源码分析
- [源码]LeakCanary
- (4.2.39)内存泄漏检测LeakCanary源码分析
- 《android源码分析系列》LeakCanary- 如何检测 Activity 是否泄漏
- Android Browser App 源码分析(三)之UI篇第一讲
- LeakCanary源码学习
- LeakCanary框架源码解析
- 第一讲 算法导论 算法分析
- Direct3D基础概念和模型整理
- 注解学习
- AlexNet简单理解&&CNN初步了解
- Merge Sorted Array
- 2016.07.03砸题选讲(Worldwide_D)小结
- LeakCanary源码分析第一讲
- C++面试题(四)——智能指针的原理和实现
- windows下搭建Ruby(基于eclipse的环境)开发环境
- Android Studio 第三方插件配置与应用
- Liunx命令
- ThinkPHP3.2.3代码笔记 - 模板调用三种方式
- C# LDAP认证登录类参考
- rootfs的制作(busybox)和安装
- windows下搭建Ruby(基于eclipse的环境)开发环境