Android性能测试-如何发现内存泄露
2017-05-19 本文已影响58人
c4a1d989518e
内存泄露一般是由什么引发的?
在大部分应用中,经常会有一类功能是需要加载附加资源的,比如显示从网络下载的文本或图片。这类功能往往需要在内存中存放要使用的资源对象,退出该功能后,就需要将这些资源对象清空。如果忘了清理,或者是代码原因造成的清理无效,就会形成内存泄漏(GC)。
Android上性能测试,首先想到的就应该是安卓sdk中自带的工具,Android Device Monitor。
Android Device Monitor在Android Studio》tools》Android》Android Device Monitor中,打开后,如图:

连接设备后,左侧列表中就会展示正在运行的包,选中包之后,点击其中的那个”🔋“,然后在右侧的【heap】下,点击【Cause GC】,就能捕获当前的内存状态了。
如果接下来,就接着在设备中操作app,可能会造成APP闪退,这时应该点击左侧列表中的那个电池🔋。

列表 | 意义 |
---|---|
Heap Size | 堆栈分配给App的内存大小 |
Allocated | 已分配使用的内存大小 |
Free | 空闲的内存大小 |
%Used | Allocated/Heap Size,使用率 |
Objects | 对象数量 |
这是我循环的浏览了几个页面之后,程序崩溃,log提示out of memory重新捕获的结果:

从图中可以看出Heap Size和Allocated都一直增长。
还有一个更直观的方法是打开Android studio的控制台那里,有个图形化显示程序内存占用的地方,

可以看出内存占用一直在增长。
文章参考:
Android性能专项测试之Heap Viewer工具
移动App性能评测与优化
腾讯TMQ专项测试团队实战案例精选