DDMS

一、页面加载时间:android调试工具DDMS中搜索displayed关键字来获取。



二、DDMS  Heap分析内存泄漏

1. 安装:

这部分东西都不再讲了,Java环境,Android环境,Eclipse环境都配好的情况下。

2. 手机:

这部分也不用考虑了,我用的小米,也没有考虑是否有过root,应该无所谓的,调试开启是必须的。连接电脑,打开Eclipse。

3. 使用DDMS:

启动Eclipse之后,必须要切换到DDMS视图下,同时打开Device视图。

手机启动某个需要测试的App,在Eclipse的Device中选中App所启动的进程

选中该进程之后,点击Heap视图下的updated heap 按钮,我认为update的概念就是启动对我们需要测试的进程的检测程序

选中该按钮之后,点击Cause GC按钮,我认为点击该按钮就是请求我们要测试的进程的数据。当然请求一次之后就不用再次点击该按钮了,因为Heap会刷新页面,来显示当前的内存的变化。

总的情况还是去图上找吧。


4.分析数据:

DDMS 中使用Heap视图来分析的话,基本上就查看1个数据

在Data object 中有叫Total Size的数据。具体的含义就是当前进程中Java的对象所占用的内存总量。

5.判断依据:

一般情况下我的分析是这样的:

  a.不断在手机上操作一个功能,如果该数据在不断地增加,则判定该功能模块存在内存泄露问题。

  b.如果反复操作该功能之后,有一定范围的起伏,但是又被稳定在某一个有限的范围内,则说明代码良好。

  C.如果有效内存手机,可能会出现程序被kill,但是程序被kill并不能代表程序一定有内存泄露。

 

 

实战分析:

动作:只是点击App上的查看相册的功能,点击返回,算一次动作。

如图所知在18次点击事件的同时,内存是随着点击次数,只增不减的不断增加,并且在第18次的时候很给力的程序崩溃掉了。

所以可以判定该功能是有很大可能存在内存泄露的。

 

注:

更多的时候并没有完全像例子中这么明显的内存泄露问题的,所以更多的时候,做内存泄露测试的时候,最好不要局限于一种方式,可以尝试不同的方式来验证我们的想法是否正确。

 

遇到的问题及解决方案总结:

1.      进程名获取不到为?

原因:安装包为签名后的包,让开发重新打未签名的包即可。

 

 

 

内存分析工具MAT(Memory Analyzer Tool) 

并不是所有的内存泄漏都可以用观察heapsize的方法检测出来,因为有的程序只是泄漏了几个对象,而且泄漏的对象个数不会随着程序的运行而增加,这种内存泄漏不会直接导致OOM,但是无用对象无法回收,无疑是对内存的浪费,会影响到程序的性能,我们需要使用MAT工具才能发现这种比较隐蔽的内存泄漏。使用MAT之前有2个概念是要掌握的:ShallowheapRetained heapShallow heap表示对象本身所占内存大小,一个内存大小100bytes的对象Shallow heap就是100bytesRetained heap表示通过回收这一个对象总共能回收的内存,比方说一个100bytes的对象还直接或者间接地持有了另外3100bytes的对象引用,回收这个对象的时候如果另外3个对象没有其他引用也能被回收掉的时候,Retainedheap就是400bytes

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值