1:数据结构优化
-
-
频繁的字符串拼接用stringBuilder,用+的方式拼接会产生中间字符串内存块,stringBuilder拼接的效率是+方式拼接的n倍,特别是很多字符串拼接。
-
ArrayMap或者SparseArray替换hashMap,占用内存少,使用效率比hashmap高,使用方法是一样的。
-
内存抖动:抖动是锯齿形的很快升落,这一般是变量使用不当造成,一下申请很多变量空间,一会不用了,一会又申请很多,一会又不用了,一会又申请很多重复造成抖动。
-
2:对象的复用:使内存耗用可以少一点。
2.1)recycleview中item view的复用
2.2)避免在onDraw方法里执行对象的创建,因为界面,图像或者view一有变动,ondraw就会重新执行一次,如果在ondraw里面执行对象创建,会影响ondraw的绘制时间,如果执行对象创建时间长,你的ui就会卡顿。Ondraw频繁执行的,频繁创建对象,效率低,创建对象优先放ondraw外面。
3:避免内存泄漏
-
上下文尽量使用application的上下文,不是activity的上下文。
4:优化OOM问题的方法
-
加载单张bitmap,有缩放比例加载,解码格式加载(4像素变2像素),局部加载(只显示中间区域,滑动显示前后区域,长图加载的模式)等方式,基本解决绝大部分的图片加载OOM问题。Glide底层估计就是这么实现的。
-
加载多张bitmap通过软引用方式管理,主要是最早用的最先释放,最近用的最后释放。