上周,我們看了圖片加載極其重要的一個部分:[緩存](https://futurestud.io/blog/glide-caching-basics)!如果你錯過了,值得你再去看看。這周,我們將整理 Glide 的另一重要功能:按優先級順序請求圖像。
**圖片請求的優先級?**
通常,你會遇到這樣的使用場景:你的 App 將會需要在同一時間內加載多個圖像。讓我們假設你正在構建一個信息屏幕,這里有一張很大的英雄圖片在頂部,還有兩個小的,在底部還有一些不那么重要的圖片。對于最好的用戶體驗來說,應用圖片元素是顯示要被加載和顯示的,然后才是底部不緊急的 `ImageView`。Glide 可以用 `Priority` 枚舉來支持你這樣的行為,調用 `.priority()` 方法。
但在看這個方法調用的示例代碼之前,讓么我看看 priority 的枚舉值,它首先作為 .priority() 方法的參數的。
**了解 Priority (優先級)枚舉?**
這個枚舉給了四個不同的選項,下面是按照遞增priority(優先級)的列表:
* `Priority.LOW`
* `Priority.NORMAL`
* `Priority.HIGH`
* `Priority.IMMEDIATE`
在我們開始例子前,你應該知道的是:優先級并不是完全嚴格遵守的。Glide 將會用他們作為一個準則,并盡可能的處理這些請求,但是它不能保證所有的圖片都會按照所要求的順序加載。
然而,如果你有的使用場景是確定一些圖片是重要的,充分利用它!
**使用實例:英雄元素和子圖像**?
讓我們開始回到開始時的例子吧。你正在實現一個信息詳情頁面,有一個英雄圖片在頂部,和較小的圖片在底部。對于最好的用戶體驗來說,英雄圖片首先需要被加載。因此,我們用 `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 工具箱:縮略圖!
- 前言
- 一開始
- 二加載進階
- 三ListAdapter(ListView, GridView)
- 四占位符 和 漸現動畫
- 五圖片重設大小 和 縮放
- 六顯示 Gif 和 Video
- 七緩存基礎
- 八請求優先級
- 九縮略圖
- 十回調:SimpleTarget 和 ViewTarget 用于自定義視圖類
- 十一加載圖片到通知欄和應用小部件中
- 十二異常:調試和錯誤處理
- 十三自定義轉換
- 十四用 animate() 自定義動畫
- 十五集成網絡棧
- 十六用 Module 自定義
- 十七Module 實例:接受自簽名證書的 HTTPS
- 十八Module 實例:自定義緩存
- 十九Module 實例:用自定義尺寸優化加載的圖片
- 二十動態使用 Model Loader
- 二十一如何旋轉圖像
- 二十二系列綜述