我使用 Glide 在我的应用中加载图片,我使用它在 RecyclerView 项目中显示一些图片。
这是我对recyclerview的适配器:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.Holder>{
private Context context;
private ArrayList<DataImages.DataImage> images;
public MyAdapter (Context context, ArrayList<DataImages.DataImage> images){
this.context = context;
this.images = images;
}
@Override
public Holder onCreateViewHolder(ViewGroup viewGroup, int type){
return new VollipsHolder(LayoutInflater.from(context).inflate(R.layout.m_layout, viewGroup));
}
@Override
public void onBindViewHolder(Holder holder, int position){
DataImages.DataImage dataImage = images.get(position);
Glide.with(context)
.load(dataImage.thumb)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(R.drawable.loading_placeholder)
.dontAnimate()
.into(holder.getImageView());
}
@Override
public void onViewRecycled(Holder holder) {
super.onViewRecycled(holder);
Glide.clear(holder.getImageView());
}
@Override
public int getItemCount(){return images.size();}
class Holder extends RecyclerView.ViewHolder{
private ImageView imageView;
public Holder (View view){
super(view);
imageView = (ImageView) view.findViewById(R.id.m_image);
}
public ImageView getImageView(){return imageView;}
}
}
一切正常,但当项目从窗口分离时,ImageViews的位图或可绘制不会从内存中删除更好的说,当项目不可见时。
滚动1分钟后我得到内存异常。
你可以看到我使用Glide.clear()
方法解决了这个问题,但它没有用。
有关此问题的任何建议吗?
答案 0 :(得分:0)
尝试使用ImageView的上下文,而不是使用传递给适配器构造函数的上下文进行Glide.with(context)
调用。
Glide根据您传入的上下文的生命周期来回收和处理图像,因此最好尽可能传递“最小”的上下文。
所以它看起来像这样:
Glide.with(holder.getImageView().getContext())
答案 1 :(得分:0)
尝试在Activity或Fragment中添加以下两种方法:
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
Glide.with(this).onTrimMemory(level);
}
@Override
public void onLowMemory() {
super.onLowMemory();
Glide.with(this).onLowMemory();
}