Glide是常用的图片加载框架,不仅支持加载网络图片还支持加载本地图片,功能强大,接口友好。但是使用不好也会出问题
这次的问题是加载图片的分辨率问题,如果设置不当,Glide会加载全分辨率的图片,而现在相机拍照都是好几M的,图片一多就很容易OOM。
具体情形
ListView通过拍照获取并加载多张图片
- 显示图片的ImageView
<ImageView
android:id="@+id/iv_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"/>//这里是关键
- Glide加载图片的地方
Glide.with(context).load(imageBean.getUrl()).into(imageView);
- 内存的变化
以上就是OOM情形再现,通过内存的变化我们可以看出,每次通过拍照增加一张图片,内存就相应增加图片的大小,没有优化。比如图片是7M,内存就会增加7M,这样显然是不行的
问题原因
当ImageView的scaleType设置为fitXY时,Glide会加载全分辨率的图片,尽管ImageView就那么大。
问题解决
有2种选择
- 更改ImageView的scaleType,比如改成fitCenter或者centerCrop
- 或者加载的时候改为
Glide.with(context).load(carImageBean.getUrl()).fitCenter().into(imageView);
没错,加个fitCenter()就行了
以上基于glide:3.7.0
欢迎关注我的公众号,和我一起每天进步一点点!