首先OOM是什么?
当程序需要申请一段“大”内存,但是虚拟机没有办法及时的给到,即使做了GC操作以后,这就会抛出 OutOfMemoryException 也就是OOM
如何避免OOM
减少内存对象的占用
I.ArrayMap/SparseArray代替hashmap
II.避免在android里面使用Enum
III.减少bitmap的内存占用;
inSampleSize:缩放比例,在把图片载入内存之前,我们需要先计算出一个合适的缩放比例,避免不必要的大图载入。
decode format:解码格式,选择ARGB_8888/RBG_565/ARGB_4444/ALPHA_8,存在很大差异。
IV.减少资源图片的大小,过大的图片可以考虑分段加载;在安卓开发中在保证不失真的情况下,使用内存较小的图片(.png和.jpg类型的图片可以通过这个网站:https://tinypng.com/进行压缩,减少内存占用);
内存对象的重复利用
大多数对象的复用,都是利用对象池的技术。(关于对象池的介绍可以草考这篇文章:http://blog.csdn.net/self_study/article/details/51477002)
I.listview/gridview/recycleview contentview的复用
II.inBitmap 属性对于内存对象的复用ARGB_8888/RBG_565/ARGB_4444/ALPHA_8
这个方法在某些条件下非常有用,比如要加载上千张图片的时候。
III.避免在ondraw方法里面 new对象
IV.StringBuilder 代替+