使用Glide的图片显示时间长

时间:2017-02-16 08:18:29

标签: android retrofit android-glide

我正在使用Retrofit向Imgur发送API请求,以便检索大约40个网址,然后使用RecyclerViewGlide中显示这些网址,如下所示:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Glide
            .with(context)
            .load(list.get(position).getLink()) // Gets the URL in my list
            .centerCrop()
            .placeholder(R.mipmap.placeholder)
            .crossFade()
            .into(holder.imageView);
}

请求得到快速回答,但我的大多数图片都保留为占位符,因为其中一些图像会逐一显示。

导致此图像显示延迟的原因是什么?它可能与我的互联网连接速度有关吗?

另外,当谈到“大量”图片时,我的方法是正确的吗?

请注意,大多数ImageView都不会加载,即使是我的用户可以看到的{。}}。

4 个答案:

答案 0 :(得分:1)

这可能取决于您的互联网连接。如果是这样,您可以使用更小的尺寸,您可以在文件名的末尾添加其中一个字母:

  • s =小方块(90×90)
  • b =大广场(160×160)
  • t =小缩略图(160×160)
  • m =中等缩略图(320×320)
  • l =大缩略图(640×640)
  • h =巨大的缩略图(1024×1024)

这个:

http://i.imgur.com/bF8zPs4.jpg

成为这个(对于小方块):

http://i.imgur.com/bF8zPs4s.jpg

答案 1 :(得分:1)

一旦你在Glide中设置了图像的url,图像本身仍然需要下载并显示在ImageView中,这会导致延迟。如果没有加载图像,您可以检查图像URL是否在浏览器中加载图像?

使用Glide在适配器中加载图像的更好方法是使用您在适配器的构造函数中传递的RequestManager。然后Glide将订阅您的片段活动的生命周期。当碎片的活动被破坏时,这将阻止图像被下载,这在Glide必须下载大图像时特别有用。

public MyAdapter(List<Object> items, RequestManager requestManager) {
    this.items = items;
    this.requestManager = requestManager;
}    

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    requestManager
            .load(list.get(position).getLink()) // Gets the URL in my list
            .centerCrop()
            .placeholder(R.mipmap.placeholder)
            .crossFade()
            .into(holder.imageView);
}

然后你可以用acitivty或片段调用你的适配器的构造函数:

MyAdapter myAdapter = new MyAdapter(items, Glide.with(this));

我找到this answer from TWiStErRob之后就一直在使用这种方法。

答案 2 :(得分:0)

取决于您的互联网连接速度和图像大小 如果图像的大小很大,则可能导致内存异常。

答案 3 :(得分:0)

Recyclerview 中, Glide 仅在可见imageViews 中加载图片。 向下滚动后,将会加载不可见的ImageView 。这是由于 RecyclerView recycleler 属性造成的。

onBindViewHolder 中添加以下内容并查看日志,您将理解:

Log.w("Link", list.get(position).getLink());