Android性能优化(三) 内存优化

内存优化,这一块要解决的是以下三个问题:

内存泄露, 没有释放不再使用的对象。
内存抖动, 不断的分配内存,释放内存,使得GC繁忙从而导致UI卡顿。
内存溢出。
 

检测内存泄露

检测内存泄漏,依赖两个工具:Android Studio Profile + MAT(Eclipse Memory Analyzer)。两者配合使用,内存泄漏无处遁形。

Android Studio Profile

是android studio 自带的检测工具,不仅内存,CPU等也可监测。在内存泄漏中的作用,是把堆内存DUMP下来, 开发者可以查看可疑的对象。

看下图,最下面一排白色的垃圾桶,是系统自己GC的时间点。开发者也可以通过左上角的垃圾桶,手动回收。这是开始DUMP文件前的必须操作。

在内存检测上,长按鼠标左键,拖动一小段。这时就开始DUMP堆内存文件了。完成后,选择"View app heap", 根据你自己项目的包名搜索相关的类。这时你就可以看到,哪些可疑对象还活着。通常最先关注activity, fragment的对象个数。当你对app的功能都玩了好几遍以后。你自己肯定是知道哪些activity, fragment此刻是不应该活着的。

  • Allocations/Deallocations  动态时分配回收的内存, 这两项对内存抖动的分析很有作用。可以看出app一直在申请释放什么对象, 通常是在循环里面做事情。比如, 每次都赋值一个string, 或者Integer装箱拆箱等等。
  • Total Count 这个类此刻有几个对象活着。

 

MAT

是eclipse的检测工具,在Android Studio Profile DUMP出堆内存文件后,可以追踪可疑对象所在的位置。

Android Studio Profile DUMP出文件后,需要转换一下文件。转换的工具在:\AppData\Local\Android\Sdk\platform-tools\hprof-conv.exe

用这个DOS 命令:hprof-conv  -z 1.hprof mat.1.hprof 完成转换。1.hprof 是DUMP出的文件,我事先放到platform-tools下面。mat.1.hprof 是我给转后的文件命的名。

此时用MAT打开mat.1.hprof文件。看下图。

点击红框里面的“Histogram”, 就进到对象列表了。在搜索栏搜索你的app 包名中的关键词。找到可以对象后选中,点击菜单的“Merge Shortest Paths to GC Roots”, 再选择“exclude all phantom/weak/soft etc. references”

到那时你一定知道到底哪里泄漏了。

内存泄漏行为

 

当第三方组件有内存泄漏时,但是通过正当途径无法处理,可以尝试用反射把内部引用的对象暴力置空。

 

WebView的内存泄漏是无法避免的,也无法消除的,只能采用独立进程方式,泄漏就让它泄漏,退出时直接杀死进程。

 

待续。。。。。

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值