
和你一起终身学习,这里是程序员Android
经典好文推荐,通过阅读本文,您将收获以下知识点:
一、Heap Snapshot
二、Heap Viewer
三、MAT
四、Allaction Tracking
五、TraceView
六、LeakCanary
七、Lint
一、Heap Snapshot
Heap Snapshot 是 android Studio 中 Android Monitor中的一个分析Java堆内存信息的工具,这边我们就用上章中的单例导致内存泄漏的例子来分析:
(1).Heap Dump启动
点击图中红色框中的Dump Java Heap,就会dump 出java堆内存信息文件(.hprof)

(2).分析Heap Snapshot面板中的信息
android studio会自动打开hprof文件,我们这时候就可以来重点分析我们需要检查的类是否有内存泄漏(必须要确定分析具体的类,比如我们分析MainActivity是否有内存泄漏,可以反复的改变屏幕的方向,然后dump出堆信息)

我们看到ClassName中可能数据太多,我们怎么能够定位到我们要分析的类呢,可以选择第二个红色框中的选择项来快的定位。

我们选择通过包来展示,这样可以通过包名来快速定位。

下面我们来分析下MainActivity是否有内存泄漏。

我们看到这里MainActivity有两个实例且都有深度,也就是说都被引用,根据Acitivity的生命周期原理,屏幕的旋转会回收之前的Activity,然后创建一个新的Activity,另一个一个被回收或者等待被回收,所以MainActivity肯定存在内存泄漏的问题。这个需要结合下面的引用树来看,但是这个太麻烦还不要用对,下面我们将介绍更好的工具来分析,这边只要知道我们分析的类是否发生内存泄漏就行了。
(3)Snapshot中表中字段含意:
Class Name 板块
Total Count 内存中该类的对象个数
Heap Count 堆内存中该类的对象个数
Sizeof 物理大小
Shallow size 该对象本身占有内存大小
Retained Size 释放该对象后,节省的内存大小
Instance 板块
depth 深度
Shallow Size 对象本身内存大小
Dominating Size 管辖的内存大小
二、Heap Viewer
Heap Viewer 是 Android Device Monitor 中的实时查看App分配的内存大小和空闲内存大小和发现内存泄漏的工具。
使用条件:1.必须5.0以及以上的系统,2.开发者选项可用

最低0.47元/天 解锁文章
3450

被折叠的 条评论
为什么被折叠?



