CLAUDE.md 3.8 KB

CLAUDE.md

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)

开发指南

添加新插件

  1. 继承 AbstractPlugin 基类
  2. 实现必要的生命周期方法
  3. 定义插件特有的配置类
  4. 通过 EventDispatcher 分发监控事件

配置模式

每个插件都有对应的配置类(如 AnrConfigBlockConfigMemoryConfig),采用 Builder 模式进行配置。

事件上报

插件通过 EventDispatcherHelper.dispatch() 方法分发监控事件,支持缓存机制处理初始化前的事件。

主要功能

  1. ANR检测: 监控Application、Service、BroadcastReceiver的ANR情况
  2. UI卡顿监控: 基于Choreographer监控主线程卡顿,支持堆栈聚合分析
  3. 内存泄漏检测: Activity销毁后通过WeakReference检测内存泄漏
  4. 大图监控: Hook Fresco加载流程,监控大尺寸图片加载

依赖关系

  • compileOnly: frame:base, frame:util, frame:coroutine, frame:zero, frame:log
  • external: Fresco (用于大图监控)
  • 第三方: xcrash_lib (崩溃捕获)

注意事项

  1. APM模块专注于性能监控,不处理具体的崩溃上报
  2. 插件采用懒加载模式,只有在需要时才启动监控
  3. 内存泄漏检测依赖GC时机,可能存在延迟
  4. UI卡顿监控在Android 5.x以下版本使用简化的采样策略