频道栏目
首页 > 资讯 > Android > 正文

Android开发关于内存抖动的分析和注意事项

18-07-13        来源:[db:作者]  
收藏   我要投稿

一,内存抖动

内存抖动:指的是在短时间内大量的新对象被实例化,运行时无法承载这样的内存分配,在这种情况下垃圾回收事件被大量调用,影响到应用程序的UI和整体性能。

二,分析内存抖动

Android Studio提供了一个 profile的工具,可以帮助我们分析内存情况,在studio的上不有一个表盘的图标

这里写图片描述

点击红框图标,然后就会运行当前项目,选中连接的手机,然后在studio的底部就会出现一个Android Profile的工具项(如下图)。

这里写图片描述

我们会看到有CPU,MEMORY,NETWORK三个选项,我们要监控的是内存,所以点击MEMORY,会进入下图

这里写图片描述

在这张图中我们可以看到我们当前应用所占的内存total,我们这里重点说一下左上角的三个按钮分别是:

GC手动垃圾回收 收集当前页面的内存情况并生成hprof文件 记录当前操作的内存情况

首先我们调用GC是当前内存处于稳定状态,然后点击红色按钮开始记录内存状况,然后我们开始在手机上进行操作(一般这个时候会发现平稳的曲线开始波动),然后我们点击停止按钮,回出现下图的情况。这里写图片描述

框框内是我们当前记录的操作区间,当我们点击停止按钮的时候,

在Class Name这个框内,会生成当前记录区间(操作过程)的堆信息。

我们发现我们的曲线有一个向上的陡坡,说明我们的操作造成了大量的内存分配,通过下面堆信息我们来找一下是什么造成了大量的内存分配。

这里写图片描述

我们发现堆信息是从大到小排列的,而第一条是系统的imageView,明显这里有问题,点击进去发现有大量的imageView对象,点击其中的一个,右下角的框框会显示该对象的具体位置信息。至此我们找到了造成内存抖动的罪魁祸首,

当然,这里的内存抖动是我人为加上去的,比较明显,但是原理是一样的。

三,注意事项

1)避免在View.onDraw()中进行内存分配,我们知道每次View重绘的时候该方法都会被调用。如果在该方法内实例化对象,每次会分配大量的内存。而且该方法内的对象一旦不被使用会快会被回收,都会导致一次或者多次垃圾回收,我们知道垃圾回收更加消耗CPU,会导致屏幕绘制时间减少,有可能造成屏幕卡顿。

2)合理的使用对象复用(尤其是bitmap)。就像系统的listView,RecyclerView滑动过程中对象复用机制这样。

3)对象池模式对于重用已分配对象非常有帮助,目的在于面对需要大量分配高成本对象时,通过对象重用来尽量减少内存分配以及垃圾回收对系统产生的影响。

4)享元模式,通过节省对象所共享的状态,以减少内存的量(和对象池是有区别的)

Kotlin写Android项目实战

相关TAG标签
上一篇:解决Ubuntu 14.04报错: error while loading shared libraries libc++.so cannot open shared object file的方法教程
下一篇:Android开发中关于静态代码检测工具 CheckStyle Lint FindBugs Pmd 的对比讲解
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站