Glide — 請求優先級
原文:Request Priorities
作者:Norman Peitek
翻譯:Dexter0218
前面介紹了圖片加載的關鍵部分:緩存!如果你錯過了看,很值得再回去看看。這篇文章我們要介紹Glide的另外一個重要特征:根據優先級排序圖片請求。
Glide 系列概覽
- 入門簡介
- 高級加載
- 適配器(ListView, GridView)
- 占位圖& 淡入淡出動畫
- 圖片大小 & 縮放
- 播放GIF & 視頻
- 緩存基礎
- 請求優先級
- 縮略圖
- 回調:定制view中使用SimpleTarget和ViewTarget
- 通知欄和桌面小控件的圖片加載
- 異常: 調試和報錯處理
- 自定義變換
- 用animate()定制動畫
- 整合網絡協議棧
- 用Modules定制Glide
- Glide Module 案例: 接受自簽名HTTPS證書
- Glide Module 案例: 自定義緩存
- Glide Module 案例: 通過加載自定義大小圖片優化
- 動態使用 Model Loaders
- 如何旋轉圖片
- 系列綜述
圖片請求優先級
你經常會遇到這些情況,你的app需要同時加載多個圖片。假設你正在創建一個信息展示界面,包含頂部的一個主要照片,還有底部的2個并不重要的小圖。對于用戶體驗,我們最好先加載主角照片,然后再加載底部不緊急的圖片。Glide里的.priority()方法和Priority的枚舉變量支持你的想法。
在看例子之前,我們先看一下作為.priority()方法參數的Priority的枚舉變量。
學習Priority枚舉變量
一共有四個不同的枚舉變量。下面以遞增方式列出:
Priority.LOW
Priority.NORMAL
Priority.HIGH
Priority.IMMEDIATE
在跳到例子前,你應當明白優先級并不是非常嚴格的。Glide會將它們作為一個指導來最優化處理請求。但并不意味著所有的圖片都能夠按請求的順序加載。
然而。如果你已經有需要某些重要的圖片的使用場景,好好利用優先級!
使用例子: 帶有子圖的主要元素
讓我們回顧一下我們最開始的例子。你正在實現一個信息細節界面,其中包含1個頂部的主要圖片,還有底部的2個小圖。對于最佳的用戶體驗,主要圖片需要優先被加載。這樣,我們分配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 );
}
如果你運行了這個例子,你會發現,不管是多大的圖片,幾乎所有情況下主要的圖片都會被優先顯示。(圖片越大,需要更多的處理時間)
展望
Glide提供非常方便的選項去分配圖片請求的優先級。非常簡單快捷地讓用戶體驗提升??纯茨愕腶pp和你的代碼,是不是能將這些學到的技能用進去!
權限優先級是非常有用的,但并不能總是完美地解決問題。我們假設你要下載一個非常大的圖片,不管你設置多高的權限,它仍然會花費較長時間去下載和處理。后面的文章,為了更好地提升用戶體驗,我們會學習Glide工具外的另一個工具:縮略圖!