写在前面:这篇文章原著是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!