У меня есть RecyclerView
, и каждый товар RecyclerView
имеет ImageView
. Я загружаю изображение в ImageView
с использованием Glide
. Я видел, как некоторые блоги говорят, что Glide
может загружать изображение асинхронно, но я не вижу этого из кода ниже. Кажется, он загружает только одно изображение, когда вызывается onBindViewHolder
. Как он показывает асинхронность?Как изображение скольжения скольжения асинхронно?
public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.ViewHolder> {
private Context mContext;
private List<GalleryItem> mList;
public GalleryAdapter(Context mContext, List<GalleryItem> mList) {
this.mContext = mContext;
this.mList = mList;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ImageView mImageView;
public ViewHolder(View itemView) {
super(itemView);
mImageView = (ImageView) itemView.findViewById(R.id.gallery_item);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_gallery,
parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
GalleryItem item = mList.get(position);
holder.mImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
Glide.with(mContext)
.load(item.getUrl())
.thumbnail(0.5f)
.into(holder.mImageView);
}
@Override
public int getItemCount() {
return mList.size();
}
public void addAll(List<GalleryItem> newList) {
mList.addAll(newList);
}
public void clear() {
mList.clear();
}
}
При прокрутке recyclerView 'onBindViewHolder()' вызывается много раз для загрузки каждого элемента, и для каждого элемента Glide загружает изображение в поток и устанавливает его в imageView, и даже кэширование изображения выполняется им , –
@dashenswen Процитированная вами цитата не относится к коду, который вы указали. Речь идет о том, как Glide выполняет асинхронную работу за капотом. В основном Glides создает определенное количество потоков, а загрузка и кэширование организовано в виде очередей. – Enzokie
@ AkshayBhat'AB '. Да, я снова прочитал документ и впечатлен им. Кстати, вы знаете, почему они могут кэшировать так много фотографий? В документе указано изображение кэш-памяти Glide в памяти. Но когда я просматриваю свой recycleview и загружаю 5000+ изображений, у него нет проблемы с OOM. Ты знаешь почему? Даже Glide загружает изображение с более низким качеством, это действительно впечатляет меня в этом вопросе. – dashenswen