- leakcanary-watcher 实现了基本的内存检测框架,只是实现了监视机制,具体怎么监视+如何处理等都通过callback回调处理
- RefWatcher 核心观察器,持有以下实例对象以实现内存监视机制
- RefWatcherBuilder 构建[核心观察器],传入1-6号对象
Set retainedKeys; //[核心]持有那些待检测以及产生内存泄露的引用的key
ReferenceQueue queue; //[核心] 用于判断弱引用所持有的对象是否已被GC
DebuggerControl debuggerControl; //[1.debug校验器] 用于查询是否正在调试中,调试中不会执行内存泄露检测
GcTrigger gcTrigger; //[2.GC控制器] 用于在判断内存泄露之前,再给一次GC的机会
HeapDumper heapDumper; //[3. 堆信息导出器] 用于在产生内存泄露室执行dump 内存heap
WatchExecutor watchExecutor; //[4. 可延迟执行线城池] 执行内存泄露检测的线程池executor
HeapDump.Listener heapdumpListener;//[5. 堆信息分析器] 用于分析前面产生的dump文件,找到内存泄露的原因
ExcludedRefs excludedRefs; //[6. 白名单map]用于排除某些系统bug导致的内存泄露
- leakcanary-analyzer 提供了基于haha的堆内存分析器HeapAnalyzer,用来对 dump 出来的内存进行分析并返回内存分析结果 AnalysisResult,内部包含了泄漏发生的路径等信息供开发者寻找定位
- leakcanary-android: 这个 module 是与 Android 世界的接入点,用来专门监测 Activity 的泄漏情况,利用 leakcanary-watcher 来进行弱引用+手动 GC 机制进行监控
- RefWatcherBuilderAndroid 构建android使用的[核心观察器],传入1-6号android对象
- DisplayLeakService 后台服务[AbstractAnalysisResultService]的子类,其onHeapAnalyzed(…) 在泄漏时会被回调
- DebuggerControlAndroid //[1.debug校验器] 用于查询是否正在调试中,调试中不会执行内存泄露检测
- HeapDumperAndroid //[3. 堆信息导出器] 用于在产生内存泄露室执行dump 内存heap
- package dumpfilehelp //[3.1 IO文件目录管理器] 用于创建和管理 存储heap信息的文件
- WatchExecutorAndroid //[4. 可延迟执行线城池] 执行内存泄露检测的线程池executor
- HeapDumpListenerAndroid //[5. 堆信息分析器] 用于分析前面产生的dump文件,找到内存泄露的原因
- package analyzerservice //[5.1] 开启一个跨进程后台服务,并调用【leakcanary-analyzer】对堆内存信息进行分析,分析结果通过发广播方式传给另外一个后台服务
HeapAnalyzerService 一个跨进程后台服务,并调用【leakcanary-analyzer】对堆内存信息进行分析,分析结果通过发广播方式传给另外一个后台服务
AbstractAnalysisResultService 用于接收跨进程后台服务所传递的堆内存分析结果,触发onHeapAnalyzed(…) ps:其具体子类在[HeapDumpListenerAndroid]被实例化时构造 - ExcludedRefsAndroid //[6. 白名单map]用于排除某些系统bug导致的内存泄露
- ActivityWatcherManager 专注于监听Activity是否泄漏 ,内部使用了 application#registerActivityLifecycleCallbacks 方法来监听 onDestory 事件
(4.2.39)内存泄漏检测LeakCanary源码分析
最新推荐文章于 2021-07-08 09:43:07 发布