做开发有一些年头的想必都会碰到程序性能方面的问题,性能优化有很多种,但是首先我们得定位是哪一块的问题;好在前方有巨人可以让我们站,Android Studio已经为我们提供了性能分析工具MAT。
下面有两种使用方式:
一、Android Device Monitor
1、打开Android Studio通过Tools ->Android -> Android Device Monitor打开。
在这里楼主遇到了一个小插曲,在打开的时候报错了:unexpected error while parsing input: Invalid uiautomator hierarchy file
解决方式就是:找到路径:C:\Users\用户名\.android下的monitor-workspace文件夹,删掉它重新打开就好了。
2、接下来在Android Device Monitor界面中首先选中你要分析的应用程序的包名(这里我的是zz.mack.com.mytimeview),然后点击Update Heap来更新统计信息,接着点击Cause GC制造GC操作即可查看当前堆的占用情况,最后点击Dump HPROF file 即当前应用的内存信息保存成hprof文件保存至一个目录下;具体如下图:
3、打开Android Studio。将你刚才保存的hprof文件拖动到编写代码的窗口即可,就是出现下面的信息:
这里首先说下A区域:
左上角是HPROF Viewer查看方式可选列表, 分别是用来选择Heap区域, 和Class View的展示方式的:
Heap类型分为:
App Heap – 当前App使用的Heap
Image Heap – 磁盘上当前App的内存映射拷贝
Zygote Heap – Zygote进程Heap(每个App进程都是从Zygote孵化出来的, 这部分基本是framework中的通用的类的Heap)
Class List View – 类列表方式
Package Tree View – 根据包结构的树状显示
紧接着下面的表名:
列名 | 说明 |
---|---|
Class Name | Heap中的所有Class |
Total Count | 内存中该类这个对象总共的数量 |
Heap Count | 堆内存中这个类对象的个数 |
Sizeof | 每个该实例占用的内存大小 |
Shallow Size | 所有该类的实例占用的内存大小 |
Retained Size | 所有该类对象被释放掉,会释放多少内存 |
接下来是B区域
列名 | 说明 |
---|---|
Instance | 该类的实例 |
Depth | 深度, 从任一GC Root点到该实例的最短跳数 |
Dominating Size | 该实例可支配的内存大小 |
C区域则描述的是B中实例具体被引用信息。
好了上面就是通过Android Device Monitor来生成hprof文件,其实Android Studio已经为我们集成了工具。
二、Android Studio
打开AS,找到底部的工具栏Android Monitor;如图依次点击三个按钮1/2/3,最后就会生成上面的hprof文件并自动打开:
接下来的界面跟第一种方式是一样的,这里就不细说了。
如果有发现按钮不能点击的同学,请先编译运行程序。
最后通过这个工具可以很方便让我们快速找出哪个类占用内存比较多容易引发内存泄漏,从而我们好做应对;一般来说容易内存泄漏的都更图片有关,所以做好图片的处理会很关键。