Android 问题记录大图加载
1.场景:
列表中动态内容的预览查看功能;
2. 异常报错:
出现RuntimeException canot draw too large(******kb) bitmap
3. 问题分析:
使用glide加载网络图片时的报错,对于一些大长图加载可能会出现内存不足的报错,而业务开发时没有做大图加载的相关处理,而ImageView的宽高都是自适应原始高度,所以内存占用过大。
比如一个1M的图片,尺寸是3500/2500,一个像素占4个字节:内存为 350025004/1024/1024 = 31M
其他一些错误操作容易引起OOM的:将一个高分辨率的图放在低分辨率的文件夹下,如果高分辨率手机去加载的话就会在做扩大保证尺寸正常会*相应倍数,反之会缩小。
#4.临时解决方案:
对于大图要单独做加载处理,原生提供了BitmapRegionDecoder,解析区域返回bitmap再渲染,SubsamplingScaleImageView是封装的第三方库可以参考使用。
很久以前鸿洋大神也写过相关大图的处理就是利用这个的。