You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Glide加载RecyclerView图片滚动后重复加载问题(无持久化磁盘缓存)

解决Glide加载RecyclerView图片滚动重加载的问题

首先你得搞清楚,你用DiskCacheStrategy.NONE其实是个误区——这个配置不仅禁用了磁盘缓存,而且Glide对这类请求的内存缓存优先级极低,很容易被系统回收,所以滚动回来就会重新加载。

给你几个实用的解决办法:

  • 替换缓存策略为MEMORY_ONLY
    这个策略正好符合你的需求:只把图片缓存到内存,不写入磁盘,既不会占用存储空间,又能利用内存缓存避免重复加载。修改后的代码:

    Glide.with(context)
         .load(feed.getImgLink())
         .diskCacheStrategy(DiskCacheStrategy.MEMORY_ONLY)
         .into(holder.myImgView);
    
  • 调整Glide内存缓存大小
    如果你的图片尺寸较大,默认的内存缓存可能不够用,容易被系统回收。可以自定义Glide的内存缓存配置,比如增大缓存上限:

    @GlideModule
    public class MyAppGlideModule extends AppGlideModule {
        @Override
        public void applyOptions(Context context, GlideBuilder builder) {
            MemorySizeCalculator calculator = new MemorySizeCalculator.Builder(context).build();
            // 把内存缓存调大20%,你可以根据自己的需求调整比例
            int customCacheSize = (int) (calculator.getMemoryCacheSize() * 1.2);
            builder.setMemoryCache(new LruResourceCache(customCacheSize));
        }
    }
    

    注意要在项目里添加这个GlideModule类,Glide会自动识别并应用配置。

  • 优化RecyclerView的缓存
    给RecyclerView增加ViewHolder和视图缓存,减少View复用带来的重新加载:

    recyclerView.setHasFixedSize(true);
    recyclerView.setItemViewCacheSize(20); // 增加ViewHolder缓存数量,默认是5
    recyclerView.setDrawingCacheEnabled(true);
    

这样调整后,滚动返回顶部时,只要内存缓存里还保留着图片,就会直接显示,不用重新请求网络。

内容的提问来源于stack exchange,提问作者Seife

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 23:05:22