在RecyclerView中使用Glide加载图片发生OOM

看bug:

image.png

  1. 使用onTrimMemory() 或者 onLowMemory() 清理内存
private void memoryClean() {
        ComponentCallbacks2 componentCallbacks2 = new ComponentCallbacks2() {
            @Override
            public void onTrimMemory(int level) {
                if (level==TRIM_MEMORY_UI_HIDDEN)
                    Glide.get(getContext()).clearMemory();
                Glide.get(getContext()).trimMemory(level);
                LoggerUtil.d("onTrimMemory"+String.valueOf(level));
            }

            @Override
            public void onConfigurationChanged(@NonNull Configuration newConfig) {

            }

            @Override
            public void onLowMemory() {
                ForumFragment.super.onLowMemory();
                Glide.get(getContext()).clearMemory();
                LoggerUtil.d("onLowMemory");
            }
        };
        getContext().registerComponentCallbacks(componentCallbacks2);

参考:Glide 这样用,更省内存!!! - 掘金

  1. 尽量减少图片资源的大小
Glide.with(context)
    .asDrawable()
    .load(url))
    .skipMemoryCache(true)
    .diskCacheStrategy(DiskCacheStrategy.ALL)
    .apply(MyUtils.gildeOptions())
    .into(imageView);

public static RequestOptions gildeOptions(){
    RequestOptions options = new RequestOptions();
    options.fitCenter() .placeholder(R.drawable.default_head) .error(R.drawable.default_head) .fallback(R.drawable.default_head).override(200,200);
    return options;
}

/*
(1)skipMemoryCache(true)表示跳过内存缓存,这里应该是关键设置;
(2)diskCacheStrategy(DiskCacheStrategy.ALL)全部使用磁盘缓存;
(3)override(200,200)重新指定加载图片的尺寸。
*/

  1. 在Recyclerview中重写这个方法,当item被隐藏的时候,调用Glide.with(fragment).clear(imageView);
@Override
public void onViewRecycled(@NonNull ViewHolder holder) {
    super.onViewRecycled(holder);
    ImageView imageView=holder.imageView;
    if (imageView!=null){
        Glide.with(context).clear(imageView);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liknana

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值