文档章节

Android studio Android Monitor介绍一

指尖上的开源
 指尖上的开源
发布于 2016/01/30 13:08
字数 905
阅读 15142
收藏 8

一、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()/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。





© 著作权归作者所有

指尖上的开源

指尖上的开源

粉丝 39
博文 34
码字总数 11909
作品 0
杭州
程序员
私信 提问
在Android Studio中打开DDMS

DDMS(Dalvik Debug Monitor Service),提供了一系列的调试服务,如logcat、设备屏幕截图、查看进程等等的辅助调试服务。 本经验介绍怎样在Android Studio中打开DDMS窗口。 工具/原料 Androi...

szmneo
2015/05/24
2.6K
1
为什么我刚安装的Android Studio没有Android Device Monitor?求助

为什么我刚安装的Android Studio没有Android Device Monitor?求助。刚刚安装完的Android Studio,一打开就发现没有Android Device Monitor,是什么原因,工具栏Android Device Monitor也是灰...

wojiushishi
2015/10/20
22K
4
在Android Studio下使用Hierarchy Viewer

前言 最近看到这篇文章《Android UI性能优化详解》,里面使用了Hierarchy Viewer来对布局进行优化。开发android这么久了,一直都有听过这个工具,但是重来都没真正去使用过,不得不说是一种失...

天王盖地虎626
03/18
113
0
基于Android Studio的内存泄漏检测与解决全攻略

自 从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclipse,成为主流的 Android开发I...

双鱼座1990
2016/06/20
5.2K
3
Windows环境下Android Studio系列4—界面介绍

参考资料 [1] Android Studio常用功能介绍, http://ask.android-studio.org/?/article/23 [2] Windows环境下Android Studio系列1—下载与安装, http://my.oschina.net/1pei/blog/467210 [3] ......

一配
2015/06/23
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

从0搭建自己的webpack开发环境(五)

往期回顾: 从0搭建自己的webpack开发环境(一) 从0搭建自己的webpack开发环境(二) 从0搭建自己的webpack开发环境(三) 从0搭建自己的webpack开发环境(四) 前四篇文章我们已经掌握了w...

前端优选
昨天
4
0
docker 构建php-fpm 7.2(swoole) 镜像

mkdir -p ~/mnt/docker/phpmkdir -p ~/mnt/docker/php#下载swoole-2.2.0.tgz安装包到software 下载地址:http://pecl.php.net/package/swoole/2.2.0#创建Dockerfilevim ~/docker/......

Jack088
昨天
3
0
简单工厂

定义:由一个工厂对象决定创建出哪一种产品类的实例 类型:创建型,但不属于GOF23种设计模式 工厂类负责创建的对象比较少 客户端(应用层)只知道传入工厂类的参数,对于如何创建对象,不关心...

东风破2019
昨天
4
0
SSH安全加强两步走

从 OpenSSH 6.2 开始已经支持 SSH 多因素认证,本文就来讲讲如何在 OpenSSH 下启用该特性。 OpenSSH 6.2 以后的版本多了一个配置项 AuthenticationMethods。该配置项可以让 OpenSSH 同时指定...

Linux就该这么学
昨天
7
0
聊聊nacos的TcpSuperSenseProcessor

序 本文主要研究一下nacos的TcpSuperSenseProcessor TcpSuperSenseProcessor nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/TcpSuperSenseProcessor.java @Compon......

go4it
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部