1. Android内存泄露检测 ---- LeakCanary的使用
依赖库即可,重点在分析工具和分析方法:
debugImplementation'com.squareup.leakcanary:leakcanary-android:2.8.1'
分析工具:MAT 、AndroidStudioProfiler 和 自带分析工具;
这里先看一下Leaking的状态(YES、NO、UNKNOWN),NO表示没泄露、YES表示出现泄漏、UNKNOW表示可能泄漏。
具体学习资料:学习资料
2. dumpsys meminfo
首先了解下Android中最重要的四大内存指标的概念
我们主要使用USS和PSS来衡量进程的内存使用情况
dumpsys meminfo命令展示的是系统整体内存情况,内存项按进程进行分类
查看单个进程的内存信息,命令如下
adb shell dumpsys meminfo [pid | packageName]
Objects中Views、Activities、AppContexts的异常可以判断有内存泄露,比如刚退出应用,查看Activites是否为0,如果不为0,则有Activity没有销毁。
3.Android Studio Memory Profiler
具体用法直接参考大佬的资源即可,不赘述。
android studio 中Memory Profile的用法
总结:内存问题高效分析方法
接入LeakCanary,监控所有Activity和Fragment的释放,App所有功能跑一遍,观察是否有抓到内存泄露的地方,分析引用链找到并解决问题,如此反复,直到LeakCanary检查不到内存泄露。
adb shell dumpsys meminfo命令查看退出界面后Objects的Views和Activities数目,特别是退出App后数目为否为0。
打开Android Studio Memory Profiler,反复打开关闭页面多次,点击GC,如果内存没有恢复到之前的数值,则可能发生了内存泄露。再点击Profiler的垃圾桶图标旁的heap dump按钮查看当面内存堆栈情况,按包名找到当前测试的Activity,如果存在多份实例,则很可能发生了内存泄露。