开发过程中,加载大图避免OOM(内存溢出),这是一个老生常谈的话题,笔者知识浅陋,根据前辈们的一些经验和自己的实践,总结一些。特此谢谢大神 AchillesL的分析和分享,受益良多。
解决大图加载一般有几种方案:
设置largeHeap为true。
根据图片类型选定解码格式。
根据原始图片宽高及目标显示宽高,设置图片采样率。
第一种方法,可以增加了堆内存空间,但这种方法仅仅延后了OOM发生的时机,治标不治本,不推荐使用该方法。
第二种方法, Android对图片进行解码时,默认是采用ARGB_8888格式,即每个像素占32位,如果图片格式是jpg,那么用ARGB_8888来解析自然是浪费,因为jpg图片没有透明通道。一般我们采用RGB_565格式来对jpg图片解码,RGB_565即每个像素点占16位,因此解码后图片的内存占用仅仅是使用ARGB_8888解码的一半 。
第三种方法,这也是网上最普遍方式,也是最有通用的,采样率可以理解成:当采样率为4,表示将4个点“合并”为一个点来读出,缩小图片尺寸的同时也减少了图片占用空间,这样解码得到出来的图片占用空间自然比原图少。
后续持续更新。