Glide-图片请求优先级(request-priorities)

写在前面:这篇文章原著是Norman Peitek,所有著作权归原作者所有,我只是在学习Glide的时候看到有间书的作者 weiyf 写了双语的翻译,觉得非常好,但是作者只写了几篇,估计是比较忙吧。于是我就去看原博了,发现原博的英文也不会很难懂,这里只是方便学习做了翻译(顺便学英语(逃),建议英文基础还可以的同学直接看原文:https://futurestud.io/tutorials/glide-request-priorities

前几篇传送门:

  • 【双语】Glide — 入门(Glide — Getting Started)
  • 【双语】Glide — 高级加载(Glide — Advanced Loading)
  • 【双语】Glide — 列表适配器(ListView, GridView)(Glide — ListAdapter (ListView, GridView))
  • Glide-默认图与过渡动画(Placeholders & Fade Animations)
  • Glide-图片缩放、调整(Image Resizing & Scaling)
  • Glide-显示Gif和视频(Displaying Gifs & Videos)
  • Glide-缓存基础(caching-basics)

原文传送门:

  • Thumbnails
  • Callbacks: SimpleTarget and ViewTarget for Custom View Classes
  • Loading Images into Notifications and AppWidgets
  • Exceptions: Debugging and Error Handling
  • Custom Transformations
  • Custom Animations with animate()
  • Integrating Networking Stacks
  • Customize Glide with Modules
  • Glide Module Example: Accepting Self-Signed HTTPS Certificates
  • Glide Module Example: Customize Caching
  • Glide Module Example: Optimizing By Loading Images In Custom Sizes
  • Dynamically Use Model Loaders
  • How to Rotate Images
  • Series Roundup
  • *Advanced ListViews With Images
  • *App Release Preparation
  • How to Choose the Best Caching Preference
  • How to Ignore URL Query Parameters In Cache Lookup (soon)
  • Network-Dependent Image Loading (soon)

正文:

上一周,我们讲了图片加载的一个关键:缓存! 如果你还没有看过,那么值得翻回去看看。本周,我们将了解Glide的另一个重要特性:按照优先级依次请求图片。

Prioritizing Image Requests:设置图片请求优先级

你经常会遇到这样的情况,你的app需要同时加载许多图片。我们假设有这样一个详情页面:页面上方有一张关键的大图和两张稍小一些的图,页面底部还有一些不那么重要的图片。 对于一个良好用户体验来说,上方的关键大图应该是最先被加载并显示的,然后再到底部那么不那么重要的ImageView。Glide通过.priority()方法结合Priority的枚举值即可按照你想要的优先级来加载图片。

但是在我们讲例子如何使用这个方法之前,我们先来看看这些枚举值,它们是作为.priority()的参数传入的。

Getting to know the Priority enum:优先级的枚举值

这些枚举总共有四种,优先级按照顺序依次递增:

  • Priority.LOW
  • Priority.NORMAL
  • Priority.HIGH
  • Priority.IMMEDIATE

在我们看例子之前,你要明白这些优先级并不是非常严格执行的。 Glide会将它们作为一个参考,在请求的时候尽量满足,并不保证所有的图片都会按照顺序来请求。

但是,如果你确定某些图片非常重要,那么可以好好利用这个特性!

例子: Hero Element with Child Images

我们回到刚才提到的例子:你要实现这么一个详情页面:顶部有关键的图片,底部有一些小图。最佳的用户体验应该是:顶部的图片最先加载出来。 因此,我们给它设置Priority.HIGH优先级。理论上,这么做已经足够了。但是为了让这例子更有趣,我们让底部的图片都以.priority(Priority.LOW)优先级加载:

private void loadImageWithHighPriority() {  
    Glide
        .with( context )
        .load( UsageExampleListViewAdapter.eatFoodyImages[0] )
        .priority( Priority.HIGH )
        .into( imageViewHero );
}

private void loadImagesWithLowPriority() {  
    Glide
        .with( context )
        .load( UsageExampleListViewAdapter.eatFoodyImages[1] )
        .priority( Priority.LOW )
        .into( imageViewLowPrioLeft );

    Glide
        .with( context )
        .load( UsageExampleListViewAdapter.eatFoodyImages[2] )
        .priority( Priority.LOW )
        .into( imageViewLowPrioRight );
}

如果你运行这个例子,你会发现几乎每次都是顶部的图先加载出来,尽管它比较大(那样它需要更长时间来加载)。

Outlook:展望

Glide提供了非常方便的方法来设置图片的优先级。这是一个快速、简单提高一些用户体验的的方法。看看你的app和你的代码,是否能运用到你刚学到的技巧吧!

按优先级请求通常来说非常有效,但不能解决所有的问题。假设你要下载一张非常大的图片,如论你设置了什么优先级,下载和处理都要花费一定的时间。
下一周,为了更好地提升用户体验,我们将介绍另一个Glide外的工具:thumbnails!

你可能感兴趣的:(Glide-图片请求优先级(request-priorities))