Android studio Android Monitor介绍一

1、Memory

这个模块包括4个功能,分别是Enabled,Initiate GC,Dump Heap JAVA,Start Allocation Tracking.。对应面板的上的4个按钮:java



1.Enabledandroid

Memory的开关。若是选择关闭,则不对当前进程进行内存监测。canvas

2.Initiate GCapp

手动调用GC,咱们在抓内存前,必定要手动点击 Initiate GC按钮手动触发GC,这样抓到的内存使用状况就是不包括Unreachable对象的.工具

3.Dump Heap java优化

点击这个按钮后,就在你点击的时刻,获取hprof文件(hprof文件是咱们使用MAT工具分析内存时使用的文件),但这里直接产生的文件MAT还不能直接使用,需用转换成标准的hprof文件。可使用AndroidStudio转换或者用hprof-conv命令转化,具体不详细介绍,网上能够查到.spa


此刻分析数据比较简单,须要详细分析那么就得使用MAT工具,android studio 1.5还没集成MAT,相信以后的版本会集成。以后的文章我会专门写一篇MAT的使用文章。虽然简单,但不是一点价值都没有。咱们用一个案例来讲明一下。
.net

先看截图:线程

在A区域(当前是类视图,即便class list view,还有包视图)点击Retained Size(包括直接引用的和间接引用的内存)排名,点击byte[],在B区域即便A中选中类的对象,点击Shallow size 根据这些对被直接引用的大小排名。选一个,而后在C中展示,这个对象的引用链,看到是被bitmap_unselect引用,占用大小是57892,bitmap_unselect又是被zoomViewLeft引用Depth就是被引用的层次。咱们就check一下ZoomView的代码。code

类有300行,咱们截图相关的代码:

能够看到这个图片始终没有被回收,因此一直占用内存。同理看到这个类里面还有其余bitmap,虽然不形成严重问题,可是内存优化的地方,若是不会被使用就要及时释放。咱们试着优化一下,通过分析,bitmap_unselect就使用一次,在canvas.drawBitmap()以后咱们就释放这个bitmap,

canvas.drawBitmap(bitmap_unselect, centerX - bitmap_unselect.getWidth()/2,
      0 - bitmap_unselect.getHeight()/2, null);
bitmap_unselect.recycle();
bitmap_unselect = null;

再用一样的方法生成hrpof,在B,C区域发现已经找不到bitmap_unselect,说明这部份内存已经被释放掉。举这个例子不是说明能够替代MAT,相反是一种补充,MAT分析复杂,但精准。而这个简单,粗暴,但也奏效。在开发过程当中能够配合使用这个轻量的工具。


4.Start Allocaton Tracking

开始分配追踪,第一次点击能够指定追踪内存的开始位置,第二次点击能够结束追踪的位置。这样咱们截取了一段要分析的内存,等待几秒钟AndroidStudio会给咱们打开一个Allocation视图.

主要分析了各个线程中的方法所占用内存的大小。就以分析UI线程为例。


依次点开所占用内存最大的方法,能够看到咱们跟到了Choregrapher的doFrame,读过源码的同窗知道,这个方法是绘制界面的开始,这个方法会调用view树的onlayout,onDraw等。就不往下点开了。同理咱们app中要是有其余线程,也能够照此分析,找到占用内存最大的方法。具体案例参考此文:http://blog.csdn.net/editor1994/article/details/50394560。

相关文章
相关标签/搜索