1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| 在 Android 开发中,内存泄漏是非常常见但又隐蔽的问题,严重时会导致 应用卡顿、OOM(内存溢出)或崩溃。
✅ 一、LeakCanary(推荐,快速集成,自动分析) 🧪 LeakCanary 是什么? LeakCanary 是 Square 出品的一个 Android 内存泄漏检测库,当你的 app 出现内存泄漏时,它会:
自动监听 Activity/Fragment 的销毁情况
如果内存泄漏,它会 弹出通知 + 详细引用链
🛠️ 集成方式(以 Java 项目为例) 在 build.gradle 中添加依赖:
dependencies { debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.12' } 无需其他初始化,LeakCanary 会自动开始监控。
🧩 如何使用 LeakCanary 排查泄漏? 运行 App,进入可能内存泄漏的界面,然后退出该界面。
如果泄漏发生,会自动弹出如下通知:
Memory Leak Detected com.xxx.MyActivity has leaked 点击通知,查看泄漏路径:
com.xxx.MyActivity → mContext → this$0 → mHandler → MessageQueue 按照引用链查看是哪个字段导致 Activity 没有被回收,例如:
静态变量持有 Activity
Handler 没有移除消息
自定义线程、定时器、RxJava 没有释放
🔍 常见内存泄漏原因 场景 原因 Handler 未 removeCallbacksAndMessages(null) 静态变量 持有 Context/Activity 单例 单例中持有非 Application 的 Context 资源未释放 Bitmap、Camera、MediaPlayer 自定义 View 监听器未解绑 RxJava 未正确 dispose()
|