Android性能优化——内存优化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lylwo317/article/details/53151604

内存分析

由于有些图片截取的区域较大,可能看不清楚上面的字。可以放大查看,Chrome浏览器使用鼠标滚轮+ctrl。

原因

为什么要进行内存分析?

原因一:频繁GC导致UI线程卡顿

如果程序出现大量的内存分配和释放,就意味着产生了频繁的GC。当GC线程运行时,其他线程会停止工作(包括UI线程),直到GC完成。所以频繁的GC,必然会导致UI线程的卡顿。特别是性能比较差的手机上,尤为明显。 这里写图片描述

原因二:内存泄漏

如果程序出现大量的内存分配,这是而GC无法回收(一般都是因为有强引用在引用该对象,也就是所谓的内存泄漏),那就会导致程序最终因为内存枯竭而崩溃。在程序上的表现,就是抛出OutOfMemory异常。
当出现上面两种情况的时候就需要进行内存分析了

分析手段

通过AndroidStudio自带的Monitors工具集中的Memory工具来分析。 这里写图片描述

使用Memory工具分析频繁GC

频繁GC在Memory监视工具中的表现是出现了大量锯齿状内存波动。如果没有出现这种类型的波动,就不是频繁的GC了 这里写图片描述

1. 选择要监视的线程

2. 获取内存分配监视报告

这里写图片描述
1. 手动触发GC 这里写图片描述
- 点击监视按钮这里写图片描述,开始监视,按钮状态变为这里写图片描述,再次点击后结束监视

这里写图片描述

  • 结束监视后会得到结果文件

    这里写图片描述

3. 分析监视结果文件

分析过程已经标注在图片上了,也就是图片上的红字

排序
这里写图片描述

展开
这里写图片描述

跳转到相应源码
这里写图片描述

找到相应代码,并解决
这里写图片描述

解决

通过分析可以出现内存波动是由于,频繁的创建临时Bitmap对象导致。在上面的业务中最终使用ColorDrawable进行代替。

总结

上面通过展示一次解决内存优化的过程,来展示解决内存问题的一种思路。希望能给大家提供一些借鉴。

猜你喜欢

转载自blog.csdn.net/lylwo317/article/details/53151604