博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于android应用内存占用查看及优化
阅读量:5743 次
发布时间:2019-06-18

本文共 797 字,大约阅读时间需要 2 分钟。

hot3.png

第一步:

查看内存使用情况

我常用的查看内存使用情况的两种方式:

1、使用命令:adb shell dumpsys meminfo $package_name or $pid

2、

通过ddms查看

如果通过监控发现内存居高不下,一直增长,基本上我们的程序就出现了内存泄露。

第二步:

详细分析内存泄露的问题

我喜欢用MAT工具来分析对象释放情况,MAT插件的的安装我在这里就不详细叙述了,同学们可以自行google。

通过MAT工具分析.hprof文件,我们一般可以得到如下图:

上面有分析结果的怀疑对象

然后是怀疑对象的详细信息,如图:

然后我们还可以分析dominator_tree,如果某个页面调用finish之后还是无法释放,重复进入多次之后,从dominator_tree中我们将能看到该类的很多实例,而且不断增多,连成一片。

如下图:

这里举一个例子,以前我们的应用中使用了ListView.addFooterView()这个方法,但没注意文档的说明:NOTE: Call this before calling setAdapter。我们为了显示不同状态的footerview,不断的动态调用ListView.addFooterView(),功能实现了而且使用时间短也不会发生crash。但是使用时间一长就必发生OOM。然后通过MAT分析,dominator_tree分析,发现里面有成片的listview无法释放,导致activity也无法释放,内存不断上涨,最终发生OOM。这也是个教训,ListView.addFooterView()这个方法一定要放在setAdapter之前调用。如果要显示不同的状态,推荐使用FooterView里面子控件的setVisibility来实现。

转载于:https://my.oschina.net/yyn2010/blog/112363

你可能感兴趣的文章
图像处理基础(7):图像的灰度变换
查看>>
Android学习笔记(27):日历视图Calendar
查看>>
hdu 1789 Doing Homework again 贪心
查看>>
Perl模块管理
查看>>
jsplumb 中文教程
查看>>
一起谈.NET技术,ASP.NET缓存初探 使用得当是关键
查看>>
一段c++代码小例子
查看>>
Matlab的XTickLabel中数值带下标
查看>>
Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)
查看>>
由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面
查看>>
没有可用于当前位置的源代码 解决办法
查看>>
一步一步理解Ajax(二)
查看>>
【C#】如何在listview中插入图片
查看>>
分享10个jQuery页面动态编辑插件
查看>>
PDF加密、解密、破解和转换软件
查看>>
我所知道的CallbackContract in WCF
查看>>
【CSS3初探之盒相关样式】我们一人一个框。。。
查看>>
Amber中的NMR restraint中的一些参数的设置的意义
查看>>
win7和linux下的文件共享
查看>>
Twenty Newsgroups Classification任务之二seq2sparse(2)
查看>>