LeakCanary的使用

LeakCanary 是 Square 开源的一款 Android 内存泄漏检测工具,开发时非常常用,可以帮助我们快速发现 Activity、Fragment、View、单例、Handler 等导致的内存泄漏问题。下面我给你一个系统性的使用说明:


1. 引入依赖

在 app/build.gradle 添加(最新版本可以到 LeakCanary GitHub 查看):

dependencies {
    debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.14'
    releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:2.14'
}
  • debugImplementation:只在 debug 包中启用检测

  • releaseImplementation:release 版本用 no-op,避免性能开销


2. 自动初始化

LeakCanary 在 Android 10+,以及大多数场景下会 自动初始化,不需要手动配置。安装好依赖后,直接运行 Debug 包即可。

默认情况下,LeakCanary 会自动监控以下对象是否被正确回收:

  • Activity

  • Fragment

  • View

  • Service


3. 运行效果

  • 启动 App 后,如果有对象无法释放,LeakCanary 会在通知栏弹出提示。

  • 点击通知 → 打开 LeakCanary 内置界面 → 展示泄漏对象的 引用链

引用链会告诉你:

哪个对象持有了泄漏对象的引用,直到导致无法回收。


4. 常用手动检测方式

有时需要手动检测对象是否泄漏,可以用 AppWatcher.objectWatcher.expectWeaklyReachable()

AppWatcher.objectWatcher.expectWeaklyReachable(
    someObject,
    "描述信息:比如某个Activity/单例可能泄漏"
)

这样即使对象不是 Activity/Fragment 这种默认监控的,LeakCanary 也能帮你检测。


5. 常见泄漏场景

LeakCanary 能检测到的典型问题:

  • Handler / Runnable 持有 Activity 引用(未移除消息队列)。

  • 静态变量 / 单例 持有 Context / Activity。

  • 注册未注销(比如 BroadcastReceiver、EventBus)。

  • 匿名内部类、非静态内部类 持有外部类引用。

  • WebView 在 Activity 销毁后未释放。


6. 使用建议

  1. 只在 Debug 版本启用,避免影响性能和用户体验。

  2. 定期运行,尤其是大功能开发完成后。

  3. 关注引用链最后的持有者,很多时候泄漏是因为某个全局对象忘了解除引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是宇哥啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值