This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
APM (Application Performance Monitoring) 模块是用于应用性能监控的核心模块,提供ANR检测、UI卡顿监控、内存泄漏检测、大图监控等功能。
APM 采用插件化架构,通过 AbstractPlugin 基类定义统一的插件生命周期:
setup(): 插件初始化配置start(): 开始监控stop(): 停止监控onJavaCrash(): Java崩溃回调onNativeCrash(): Native崩溃回调通过 EventDispatcher 统一管理性能事件的分发和处理,支持自定义 PluginEventHandler 处理特定类型的性能事件。
core/
├── APM.kt // APM核心管理类,单例模式,Builder模式初始化
├── APMStatus.kt // APM状态管理
├── ApmSettings.kt // APM配置管理
├── base/AbstractPlugin.java // 插件基类,定义插件生命周期
├── stat/EventDispatcher.kt // 事件分发器
└── common/ // 通用工具类
plugins/
├── anr/ // ANR检测插件
│ ├── AnrPlugin.kt // ANR检测主插件
│ ├── core/AnrMethodImpl.kt // ANR检测核心实现
│ ├── mq/MessageManager.kt // 消息队列监控
│ └── strategy/ // 不同组件的ANR检测策略
├── uiblock/ // UI卡顿监控
│ ├── UIBlockMonitor.kt // UI卡顿监控插件
│ ├── BlockCollector.java // 卡顿信息收集器
│ └── StackAggregationSampler.java // 堆栈信息采样器
├── memory/memoryleak/ // 内存泄漏检测
│ ├── MemoryLeakPlugin.java // 内存泄漏检测插件
│ ├── GcMonitor.java // GC监控
│ └── KeyedWeakReference.java // 弱引用跟踪
└── largebitmap/ // 大图监控
├── LargeBitmapPlugin.kt // 大图监控插件
└── HookPipelineDraweeControllerBuilder.java // Fresco Hook实现
APM.init(application) {
use(AnrPlugin())
use(UIBlockMonitor { uiBlockEnable = true })
use(MemoryLeakPlugin(MemoryConfig.Builder().build()))
use(LargeBitmapPlugin())
}
val anrPlugin = APM.get().getPlugin(AnrPlugin::class.java)
APM.get().addEventHandler(customEventHandler)
AbstractPlugin 基类EventDispatcher 分发监控事件每个插件都有对应的配置类(如 AnrConfig、BlockConfig、MemoryConfig),采用 Builder 模式进行配置。
插件通过 EventDispatcherHelper.dispatch() 方法分发监控事件,支持缓存机制处理初始化前的事件。