记一次Android内存优化

本文详述了一次Android应用的内存优化过程,包括使用MAT工具进行内存泄漏检测、图片加载优化、线程管理、Activity泄露排查等。通过解决经典问题如图片超尺寸加载、错误使用PDF播放器等,实现了明显的优化成果。文章还提供了相关工具和资源链接,以供进一步学习。
摘要由CSDN通过智能技术生成

前言

MAT是闻名海内外的内存泄漏检测工具,虽然不能指望MAT告诉我们哪里泄漏了,但是,借用这个工具,可以分析、定位出很多内存占用和泄漏的问题。最近做了公司内某款应用内存占用和内漏问题的测试。偷得半日闲,总结下经验教训。因开发仍在优化问题解决中,暂时总结问题检测方法。
特别鸣谢:明哥、田姐姐,良师益友的存在,一直是我前进道路上的灯塔。

2.ImageMagick(支持MAC、Linux、Windows):用于转化字节数组为图片
下载地址:http://www.imagemagick.org/script/download.php
3.MPA助手(公司自己开发的用于监控性能数据及内存分析工具),用于监控性能数据:
4.dump内存镜像和镜像转化脚本:https://github.com/stayhungryYu/memory

*另外附带用于某场景验证的脚本,Android内存dump文件到PC并转化

理论基础

内存:

在这里插入图片描述
进程总内存占用: 220.59M
1)JavaHeap: 90.08M
2)NativeHeap:native层的 so 中调用malloc或new创建的内存 —— 28.44M
3)Graphics:OpenGL和SurfaceFlinger相关内存 ——28.15M
4)Stack:线程栈——1.81M
5)Code:dex+so相关代码占用内存——64.16M
6)Other:7.96M
上述6中内存占用除了两种不需要考虑,其他5中通通需要优化。不需要考虑的是:
Other:暂时无从分析
Graphics:若应用没有直接调用OpenGL,则可以确定这部分内存是由Android Framework操控的,可以忽略。(当然对于游戏类应用,这里肯定是优化重点。)

测试前的小插曲

  1. MAT(或者说整个DDMS)检测并显示进程,需要APP打开debugable开关:AndroidManifest.xml文件里配置,android:debuggable=“true”
  2. 测试场景、用例可以详细,但无需过度详细,主要关注:
  • 应用内页面之间的跳转切换、视图窗口的开与关——看是否及时释放(有些应用为了快速恢复现场,选择不释放,视项目而定)及是否有泄漏泄漏
  • 应用之间的切换(跳转),应用前后台切换——看是否及时释放(有些应用为了快速恢复现场,选择不释放,视项目而定)及是否有泄漏泄漏
  • 前后、后台台静置——看是否有持续内存增加,
    (如果支持)设备横竖屏转屏——看是否有内存泄漏,主要是重复创建问题

MAT问题排查套路(其实并没有套路,只有经验)

网上几个不错的帖子:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值