vscode-drawio扩展安全审计:防范潜在的安全漏洞
OutSiderAPM API速查手册:ITracker、Listener与Tracker核心接口完全参考
OutSiderAPM 是一款强大的 Android 应用性能监控(APM)平台,通过统一的 ITracker 接口、Listener 监听器 与 Tracker 核心接口,帮助开发者一站式采集线程、内存、流量、电量、卡顿与 ANR 六大维度的运行数据。这篇 OutSiderAPM API 速查手册 面向新手与普通开发者,不堆砌复杂源码,用最短时间带你搞懂每一个核心接口的职责、方法签名与接入姿势,随查随用。🚀
一、OutSiderAPM 核心架构速览
整个性能监控框架分为三层,理解这张"地图"你就能快速定位任何 API:
| 层级 | 代表类 | 职责 |
|---|---|---|
| 入口层 | OutSider |
应用级生命周期管理,统一启停所有 Tracker |
| 接口层 | ITracker |
所有监控模块的"总契约" |
| 能力层 | 六大 Tracker | 线程/内存/流量/电量/卡顿/ANR 的具体实现 |
核心入口代码位于 outsider/src/main/java/me/wsj/apm/OutSider.kt,所有 Tracker 都由它统一调度,这也是理解整套 API 的最佳起点。
二、快速集成:三步启动性能监控
在动手看接口之前,先让 OutSiderAPM 跑起来。项目源码托管在 GitCode,集成步骤如下:
- 获取源码:使用
git clone https://gitcode.com/gh_mirrors/ou/OutSiderAPM拉取完整工程,其中outsider模块就是运行时 SDK,apm-plugin是字节码插桩插件。 - 初始化入口:在
Application.onCreate()中调用OutSider.init(app),框架会借助ProcessLifecycleOwner自动感知应用前后台状态。 - 开启监控:应用进入前台后,框架自动调用各 Tracker 的
startTrack();应用销毁时自动调用destroy()释放资源。
三、ITracker 接口:所有监控模块的总契约
ITracker 是整个框架最底层的接口,定义在 outsider/src/main/java/me/wsj/core/ITracker.java。任何监控模块只要实现它,就能被框架统一管理生命周期。
| 方法 | 调用时机 | 用途 |
|---|---|---|
startTrack(Application) |
应用进入前台 | 启动该模块的数据采集 |
pauseTrack(Application) |
应用退到后台 | 暂停采集,降低后台耗电 |
destroy(Application) |
应用销毁 | 释放资源,注销监听 |
💡 新手提示:日常开发中你基本不需要直接实现 ITracker,框架内置的六大 Tracker 已经实现完毕;它的意义在于让你理解"所有监控模块都遵循同一套启停规范"。
四、Listener 监听器:数据回调的五个关键接口
监听器(Listener)是 Tracker 把采集结果"送"给你的通道。所有监听器接口都在 outsider/src/main/java/me/wsj/apm/ 目录下,按功能模块分包,非常清晰。
1. ANR 监听:AnrListener 与 OnInterruptedListener
当主线程超过 4 秒无响应时触发,定义在 anr/AnrListener.kt:
onAppNotResponding(error: AnrError)
回调参数 AnrError 中包含 ANR 发生的时间、线程堆栈等详细信息。配套的 OnInterruptedListener(见 anr/OnInterruptedListener.kt)负责处理监控线程被意外中断的异常场景,返回 onInterrupted(e: InterruptedException) 回调。
2. 内存泄漏监听:ITrackMemoryListener
定义在 mem/ITrackMemoryListener.kt,包含两个回调:
onLeakActivity(activity: String, count: Int):Activity 泄漏时回调,count为泄漏次数onCurrentMemoryCost(trackMemoryInfo: MemoryInfo?):周期性上报当前内存消耗
3. 电量消耗监听:IBatteryListener
定义在 battery/IBatteryListener.kt,通过 onBatteryCost(batteryInfo: BatteryInfo?) 回调返回电量统计信息,用于定位高耗电场景。
4. 网络流量监听:TrafficListener
定义在 traffic/TrafficListener.kt,回调 getTrafficStats(activity: Activity?, value: Long),其中 value 是当前页面累计消耗的流量字节数。
五、Tracker 核心接口:注册与注销监听器
所有 Tracker 都继承自泛型基类 BaseTracker<T>(见 outsider/src/main/java/me/wsj/core/BaseTracker.kt),它提供了统一的监听器管理能力:
| 方法 | 功能 |
|---|---|
addTrackerListener(listener: T) |
注册一个监听器,开始接收数据回调 |
removeTrackerListener(listener: T) |
注销监听器,停止接收回调 |
框架内置的六大 Tracker 均为单例,通过 .instance 获取,访问路径统一在 outsider/src/main/java/me/wsj/apm/ 下:
ThreadTracker:线程监控(thread/ThreadTracker.kt)MemoryTracker:内存与泄漏监控(mem/MemoryTracker.kt)TrafficTracker:流量监控(traffic/TrafficTracker.kt)BatteryStatsTracker:电量监控(battery/BatteryStatsTracker.kt)BlockTracker:卡顿监控(jank/BlockTracker.kt)AnrMonitor:ANR 监控(anr/AnrMonitor.kt)
六、实战示例:一次性注册全部监听器
以框架自带的 OutSider.kt 为模板,一个完整的监听注册流程如下:
- 内存监控:调用
MemoryTracker.instance.addTrackerListener(...)注册ITrackMemoryListener,在onLeakActivity中记录泄漏页面与次数。 - 流量监控:调用
TrafficTracker.instance.addTrackerListener(...)注册TrafficListener,按 Activity 维度统计流量消耗。 - ANR 监控:调用
AnrMonitor.instance.setAnrListener(...)与setAnrInterceptor(...),既能拿到 ANR 详情,也能自定义拦截阈值(默认 4 秒)。 - 统一启动:依次调用各模块的
startTrack(app);应用销毁时调用destroy(app)清理现场。
七、接口速查表:一张表记住全部 API
| 接口 | 核心方法 | 所属模块 |
|---|---|---|
ITracker |
startTrack / pauseTrack / destroy |
框架统一契约 |
BaseTracker<T> |
addTrackerListener / removeTrackerListener |
监听器管理基类 |
AnrListener |
onAppNotResponding(AnrError) |
ANR 监控 |
OnInterruptedListener |
onInterrupted(InterruptedException) |
ANR 监控 |
ITrackMemoryListener |
onLeakActivity / onCurrentMemoryCost |
内存监控 |
IBatteryListener |
onBatteryCost(BatteryInfo) |
电量监控 |
TrafficListener |
getTrafficStats(Activity, Long) |
流量监控 |
八、常见问题 FAQ
Q1:为什么我的监听器收不到回调? 请确认两点:一是通过 addTrackerListener 完成注册,二是确保对应 Tracker 已调用 startTrack()。
Q2:ITracker 和 BaseTracker 有什么区别? ITracker 定义生命周期契约,BaseTracker 提供监听器注册的实现能力,两者配合使用:各 Tracker 继承 BaseTracker,同时遵循 ITracker 的生命周期规范。
Q3:想扩展自定义监控模块怎么办? 继承 BaseTracker<T> 实现监听器管理,再实现 ITracker 的启停方法,最后在 OutSider 中接入即可,框架完全开放扩展。
这份 OutSiderAPM API 速查手册 建议收藏备用:集成时看"快速集成",排查问题查"接口速查表",需要二次开发时再深入阅读源码即可。现在就去 clone 项目,用十个监听器把应用性能"看穿"吧!🎯
更多推荐



所有评论(0)