摘要: Android Monitor 很强大,有5个模块,Memory、Network、logcat、CPU、GPU。现在分5篇文章分别介绍。

一、Memory

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



1.Enabled

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

2.Initiate GC

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

3.Dump Heap java

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


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

先看截图:

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

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

可以看到这个图片始终没有被回收,所以一直占用内存。同理看到这个类里面还有其他bitmap,虽然不造成严重问题,但是内存优化的地方,如果不会被使用就要及时释放。我们试着优化一下,经过分析,bitmap_unselect就使用一次,在canvas.drawBitmap()之后我们就释放这个bitmap,

canvas.drawBitmap(bitmap_unselect, centerX - bitmap_unselect.getWidth()/2,      0 - bitmap_unselect.getHeight()/2null);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。



更多相关文章

  1. IPC框架分析 Binder,Service,Service manager
  2. button的一些使用小常识(点击效果,button圆角,边框线的实现)
  3. android 系统属性
  4. Android:图片不加载到内存获取图片的大小
  5. android拨号的源码分析
  6. 解决给一组Button设置Background导致点击效果错乱问题
  7. android避免decodeResource图片时占用太大的内存
  8. Android的Activity的启动流程分析
  9. 高通Android(安卓)display架构分析

随机推荐

  1. Android内存信息
  2. Android(安卓)人脸识别
  3. Android(安卓)读写文件的N种写法
  4. Android(安卓)建立文件夹、生成文件并写
  5. Android官方入门文档[12]启动一个活动
  6. Android定义的路径全局变量
  7. android学习资料汇总
  8. Android(安卓)native crash log分析
  9. android light
  10. Android中菜单的使用