app 内存优化参考

724a705b474d09c5b7de35512a771ecc.gif

和你一起终身学习,这里是程序员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)

dc9aaaa9dd8c4b317ee700a53d9aa931.jpeg

(2).分析Heap Snapshot面板中的信息

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

72feea0d33dd7067e420bae9027cda46.jpeg

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

35fdbfc40be60ba4fd33b8cdce5e9fa9.jpeg

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

62844ef4bfcccf1cfd316664218338ce.jpeg

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

aca52debf3ee9eefba1bd997b042e1b1.jpeg

我们看到这里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.开发者选项可用

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员Android

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

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

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

打赏作者

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

抵扣说明:

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

余额充值