Glide加载图片OutOfMemory

Glide是常用的图片加载框架,不仅支持加载网络图片还支持加载本地图片,功能强大,接口友好。但是使用不好也会出问题。

这次的问题是加载图片的分辨率问题,如果设置不当,Glide会加载全分辨率的图片,而现在相机拍照都是好几M的,图片一多就很容易OOM。

具体情形

ListView通过拍照获取并加载多张图片
  • 显示图片的ImageView
//这里是关键
  • Glide加载图片的地方
Glide.with(context).load(imageBean.getUrl()).into(imageView);
  • 内存的变化
Glide加载图片OutOfMemory_第1张图片
加载一张照片后内存显著增加

以上就是OOM情形再现,通过内存的变化我们可以看出,每次通过拍照增加一张图片,内存就相应增加图片的大小,没有优化。比如图片是7M,内存就会增加7M,这样显然是不行的

问题原因

当ImageView的scaleType设置为fitXY时,Glide会加载全分辨率的图片,尽管ImageView可能不需要这么大。

问题解决

有2种选择

  • 更改ImageView的scaleType,比如改成fitCenter或者centerCrop
  • 或者加载的时候改为
Glide.with(context).load(carImageBean.getUrl()).fitCenter().into(imageView);

没错,加个fitCenter()就行了

建议涉及拍照获取照片并加载的地方,观察下加载照片以后内存的变化;其他的涉及加载图片的也需要观察内存的变化情况,以及时发现因为图片导致的OOM

以上基于glide:3.7.0


欢迎关注我的微信公众号,期待与你一起学习,一起交流,一起成长!


Glide加载图片OutOfMemory_第2张图片
AntDream

你可能感兴趣的:(Glide加载图片OutOfMemory)