Android Studio 内置了四种性能监测工具Memory Monitor、Network Monitor、CPU Monitor、GPU Monitor,我们可以使用这些工具监测APP的状态,该文简单介绍下这些工具的使用
Memory Monitor
Memory Monitor工具主要是用来监测APP的内存分配情况,判断是否存在内存泄漏。连接设备,选择好要监测的APP,如图所示:
A:手动触发GC操作
B:获取当前的堆栈信息,生成.hprof文件
C:内存分配追踪工具,生成.alloc文件
D:已使用内存
E:剩余可用内存
通过与应用交互并在Memory Monitor中观察它是如何影响内存的使用,图表可以为你展示一些潜在的问题:
1.频繁的垃圾收集活动使应用运行缓慢。
2.应用耗尽内存导致app崩溃.
3.潜在的内存泄漏
正常情况下,上图中的D区域会随着时间的走势慢慢上升(就算你与APP没有任何交互),直到E区域被用完,则会触发GC操作,释放内存,周而复始。如果你发现你的应用是静态的,但是E区域的内存很快就被用完了,即频繁的触发GC操作,这时你就应该引起重视,说不定你的代码中就存在着引起内存泄漏的隐患。
Dump Java Heap
使用场景:定位内存泄漏
点击上图中的B按钮开始检测APP,此时APP会变得很卡,容易发生ANR,一段时间过后会生成.hprof文件,如下图所示
这里的截图是我故意生成的一个能引起内存泄漏的例子,点击上图右上方的Analyzer Tasks按钮,若代码中存在内存泄漏隐患,在其下方会列出可能引起内存泄漏的Activity,如上图右下方的Leaked Activities,之后我们便可以结合左下方Reference Tree中指出的问题分析,如果你有源码的话还可以索引源码(右键->Jump to source)。实例代码如下:
多次旋转屏幕,使得内存不断增加就容易引起内存泄漏。
上面的例子比较简单,可以直接通过Memory Monitor工具就能直接看出,在平常的开发中内存泄漏的问题往往没有这么简单,我们可以借助MAT工具分析。
MAT
MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。
在使用MAT工具前,我们需要将.hprof文件转换成标准的.hprof文件才能被识别,在Android Studio中可以通过以下操作转换
之后用MA