1 LeakCanary(最常用,能监控整个App内存泄漏情况)
1.1 使用LeakCanary
// 仅在debug包启用LeakCanary
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.2'
1.2 效果
1.3 如何修复内存泄漏?
1.4 记一次内存泄露例子
1.5 官方链接
2 Lint分析工具
(1)概述
lint是随Android SDK自带的一个静态代码分析工具。它用来对Android工程的源文件进行检查,找出在正确性、安全、性能、可使用性、可访问性及国际化等方面可能的bugs和可优化提升的地方,在提交版本前检查非常有必要,作用明显。
(2)lint工作流程
针对我们的项目,通过lint.xml配置lint分析的选项,执行检查后,会针对要分析的issue生成报告。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z830SMnV-1584254978730)(https://img-blog.youkuaiyun.com/20131227095352671)]
(3)分析的范围
要对Android项目进行静态分析,首先就是指定要分析的源文件的范围。包括以下方面:
整个工程或模块。
目录和文件。
xml和java文件中使用标签和注解来忽略检查。
lint检查结果分warning和error两个等级,可以忽略warning问题。
(4)检查的方面
检测资源文件是否有没有用到的资源。
检测常见内存泄露
安全问题SDK版本安全问题
是否有费的代码没有用到
代码的规范---甚至驼峰命名法也会检测
自动生成的罗列出来
没用的导包
可能的bug
(5)在Android Studio中使用
在Android Studio中,通过菜单或者在Project视图以及代码视图中的右键菜单中选择Analyze > Inspect Code就可以打开lint检查的对话框Specify Inspection Scope,在这里设置好要进行代码分析的范围,确定后工具就开始对代码进行检查了,完成后会自动打开Inspection工具窗口。下图,左边是分类了的问题,选中一个问题后,右边是针对此问题的详细说明。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TEhMpafT-1584254978731)(https://img-blog.youkuaiyun.com/20161115144548240)]
(6)小结
使用lint进行代码的检查和分析十分简单高效,在发布版本前,使用lint对工程进行优化,何乐而不为。
(7)参考链接
Android代码分析工具lint学习
3 Allaction Tracking(Android Studio版)
追踪内存分配信息,按顺序排列,这样我们就能清晰看出来某一个操作的内存是如何一步一步分配出来的。比如在有内存抖动的可疑点,我们可以通过查看其内存分配轨迹来看短时间内有多少相同或相似的对象被创建,进一步找出发生问题的代码。
3.1 参考链接介绍
Android性能专项测试之Allocation Tracker(Android Studio)
3.2 追踪内存分配使用方法
(1)Start
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YJU60FVx-1584254978732)(https://img-blog.youkuaiyun.com/20161114212351747)]
(2)Stop
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZ4eOfJm-1584254978732)(https://img-blog.youkuaiyun.com/20161114212408902)]
(3)分析
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndiFLQR9-1584254978733)(https://img-blog.youkuaiyun.com/20161114212420746)]
3.3 内存分配大案例
(1)图显示分配次数1W多次
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2RMhZ1w-1584254978733)(https://img-blog.youkuaiyun.com/20161118100636319)]
(2)分配占了很大比重
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eNfpbM7F-1584254978733)(https://img-blog.youkuaiyun.com/20161118100649710)]