如何解决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
相关产品推荐
相关产品推荐

