LeakCanary 是 Square 公司开源的一款 Android 内存泄漏检测工具能够自动发现并报告应用中的内存泄漏问题帮助开发者显著减少 ANR 和 OOM 崩溃。 概述核心功能自动监控 Activity、Fragment、ViewModel、Service 等组件的生命周期在它们被销毁后检测是否仍被强引用持有从而发现内存泄漏。工作原理分为四个步骤检测通过 Hook Android 生命周期自动感知 Activity/Fragment 的 onDestroy() 调用。转储若对象未被回收触发 GC 后仍存在则 dump 当前堆内存生成 .hprof 文件。分析在后台进程解析堆转储文件构建从 GC Root 到泄漏对象的最短强引用路径Leak Trace。分类与通知对泄漏进行分类并通过系统通知、Logcat 日志和内置的 Leaks App 展示详细报告。价值内存泄漏会逐渐累积导致 GC 频繁、界面卡顿最终引发 OOM 崩溃。使用 LeakCanary 能在开发阶段提前发现并修复这些问题。️ 教程集成依赖在模块的 build.gradle 文件中添加依赖请以官方最新版本为准dependencies {debugImplementation ‘com.squareup.leakcanary:leakcanary-android:2.14’}LeakCanary 2.x 版本默认通过 ContentProvider 自动初始化无需任何手动代码。自动监控依赖添加后以 debug 模式运行应用即可。LeakCanary 会自动监控以下对象• ActivityonDestroy() 后• FragmentonDestroyView() / onDestroy() 后• ViewModelonCleared() 后• ServiceonDestroy() 后• RootView从 WindowManager 移除后查看报告当检测到泄漏时你会• 在通知栏收到警告。• 在 Logcat 中看到详细的泄漏堆栈。• 点击通知可打开 Leaks App查看完整的泄漏对象列表及每条泄漏的详细引用链。点击桌面Leaks App图标也可以打开手动监控其他对象对于非默认监控的对象如单例、自定义对象可以手动添加监控AppWatcher.objectWatcher.watch(myObject,“MyObject 在某个时机后应被回收”)解读泄漏报告可以复制或截图找AI解说及提供解决方案报告会清晰展示从 GC Root 到泄漏对象的引用链并高亮可能的问题引用。例如GC Root: System class↓static FontsContract.sContext↓com.example.leakyapp.MyApplication instance↓MyApplication.leakySingleton↓LeakySingleton.leakyActivityRef→ com.example.leakyapp.MainActivity instanceLeaking: YES你需要沿着引用链找到不恰当的强引用持有者如静态变量、未取消的订阅等并进行修复。 总结优点• 自动化对 Activity/Fragment 等实现全自动检测开箱即用。• 集成简单一行依赖即可。• 报告直观通过通知和可视化界面清晰展示泄漏链。• 可定制支持定制堆转储行为、分析结果处理等。缺点与局限• 不适用于线上仅推荐在 debug 版本使用因为堆转储和分析会消耗较多 CPU 和内存。• 检测范围有限无法检测因一次性申请过大内存如大 Bitmap直接导致的 OOM也无法解决所有类型的内存问题如 Native 内存泄漏。使用建议• 仅在 debugImplementation 中引入避免影响正式版性能。• 在完成主要功能开发或进行重点测试时主动进行内存泄漏排查。• 结合 LeakCanary 的报告和代码审查重点修复引用链根部的不当持有。总的来说LeakCanary 是 Android 开发中提升应用稳定性和性能的必备工具能有效帮助开发者在早期发现并解决内存泄漏问题。
LeakCanary 概述,教程,总结
发布时间:2026/5/26 14:52:14
LeakCanary 是 Square 公司开源的一款 Android 内存泄漏检测工具能够自动发现并报告应用中的内存泄漏问题帮助开发者显著减少 ANR 和 OOM 崩溃。 概述核心功能自动监控 Activity、Fragment、ViewModel、Service 等组件的生命周期在它们被销毁后检测是否仍被强引用持有从而发现内存泄漏。工作原理分为四个步骤检测通过 Hook Android 生命周期自动感知 Activity/Fragment 的 onDestroy() 调用。转储若对象未被回收触发 GC 后仍存在则 dump 当前堆内存生成 .hprof 文件。分析在后台进程解析堆转储文件构建从 GC Root 到泄漏对象的最短强引用路径Leak Trace。分类与通知对泄漏进行分类并通过系统通知、Logcat 日志和内置的 Leaks App 展示详细报告。价值内存泄漏会逐渐累积导致 GC 频繁、界面卡顿最终引发 OOM 崩溃。使用 LeakCanary 能在开发阶段提前发现并修复这些问题。️ 教程集成依赖在模块的 build.gradle 文件中添加依赖请以官方最新版本为准dependencies {debugImplementation ‘com.squareup.leakcanary:leakcanary-android:2.14’}LeakCanary 2.x 版本默认通过 ContentProvider 自动初始化无需任何手动代码。自动监控依赖添加后以 debug 模式运行应用即可。LeakCanary 会自动监控以下对象• ActivityonDestroy() 后• FragmentonDestroyView() / onDestroy() 后• ViewModelonCleared() 后• ServiceonDestroy() 后• RootView从 WindowManager 移除后查看报告当检测到泄漏时你会• 在通知栏收到警告。• 在 Logcat 中看到详细的泄漏堆栈。• 点击通知可打开 Leaks App查看完整的泄漏对象列表及每条泄漏的详细引用链。点击桌面Leaks App图标也可以打开手动监控其他对象对于非默认监控的对象如单例、自定义对象可以手动添加监控AppWatcher.objectWatcher.watch(myObject,“MyObject 在某个时机后应被回收”)解读泄漏报告可以复制或截图找AI解说及提供解决方案报告会清晰展示从 GC Root 到泄漏对象的引用链并高亮可能的问题引用。例如GC Root: System class↓static FontsContract.sContext↓com.example.leakyapp.MyApplication instance↓MyApplication.leakySingleton↓LeakySingleton.leakyActivityRef→ com.example.leakyapp.MainActivity instanceLeaking: YES你需要沿着引用链找到不恰当的强引用持有者如静态变量、未取消的订阅等并进行修复。 总结优点• 自动化对 Activity/Fragment 等实现全自动检测开箱即用。• 集成简单一行依赖即可。• 报告直观通过通知和可视化界面清晰展示泄漏链。• 可定制支持定制堆转储行为、分析结果处理等。缺点与局限• 不适用于线上仅推荐在 debug 版本使用因为堆转储和分析会消耗较多 CPU 和内存。• 检测范围有限无法检测因一次性申请过大内存如大 Bitmap直接导致的 OOM也无法解决所有类型的内存问题如 Native 内存泄漏。使用建议• 仅在 debugImplementation 中引入避免影响正式版性能。• 在完成主要功能开发或进行重点测试时主动进行内存泄漏排查。• 结合 LeakCanary 的报告和代码审查重点修复引用链根部的不当持有。总的来说LeakCanary 是 Android 开发中提升应用稳定性和性能的必备工具能有效帮助开发者在早期发现并解决内存泄漏问题。