Glide — 整合網(wǎng)絡(luò)協(xié)議棧
原文:Integrating Network Stacks
作者:Norman Peitek
翻譯:Dexter0218
在學(xué)習(xí)了許多加載和顯示圖片的方案后,我們要研究為Glide改變基礎(chǔ)網(wǎng)絡(luò)協(xié)議棧。這篇指導(dǎo)建立在你使用Gradle的前提上。
Glide 系列概覽
- 入門(mén)簡(jiǎn)介
- 高級(jí)加載
- 適配器(ListView, GridView)
- 占位圖& 淡入淡出動(dòng)畫(huà)
- 圖片大小 & 縮放
- 播放GIF & 視頻
- 緩存基礎(chǔ)
- 請(qǐng)求優(yōu)先級(jí)
- 縮略圖
- 回調(diào):定制view中使用SimpleTarget和ViewTarget
- 通知欄和桌面小控件的圖片加載
- 異常: 調(diào)試和報(bào)錯(cuò)處理
- 自定義變換
- 用animate()定制動(dòng)畫(huà)
- 整合網(wǎng)絡(luò)協(xié)議棧
- 用Modules定制Glide
- Glide Module 案例: 接受自簽名HTTPS證書(shū)
- Glide Module 案例: 自定義緩存
- Glide Module 案例: 通過(guò)加載自定義大小圖片優(yōu)化
- 動(dòng)態(tài)使用 Model Loaders
- 如何旋轉(zhuǎn)圖片
- 系列綜述
整合網(wǎng)絡(luò)協(xié)議棧
通過(guò)HTTP/HTTPS從網(wǎng)絡(luò)下載圖片,是顯示圖片的一個(gè)重要的環(huán)節(jié)。雖然標(biāo)準(zhǔn)的Android網(wǎng)絡(luò)包可以完成這些工作,但是仍然有很多開(kāi)發(fā)者為了改善android的網(wǎng)絡(luò)做了一些開(kāi)發(fā)。每個(gè)庫(kù)都有自己的優(yōu)點(diǎn)和缺點(diǎn)。最終取決于項(xiàng)目的實(shí)際需求和開(kāi)發(fā)者的個(gè)人愛(ài)好。
Glide的開(kāi)發(fā)者不強(qiáng)迫你使用他們推薦的網(wǎng)絡(luò)庫(kù)。所以,Glide是無(wú)關(guān)HTTP/S的。理論上,它能實(shí)現(xiàn)基本的網(wǎng)絡(luò)功能,在任何情況下工作。它需要一個(gè)Glide的ModelLoader的接口設(shè)置。為了讓這個(gè)更簡(jiǎn)單,Glide提供了兩個(gè)網(wǎng)絡(luò)庫(kù)的支持:OkHttp 和 Volley。
OkHttp 2
我們假設(shè)你想要用OkHttp 2作為你的Glide網(wǎng)絡(luò)庫(kù)。可以手動(dòng)通過(guò)定義一個(gè)GlideModule來(lái)實(shí)現(xiàn)整合。如果你想要避免手動(dòng)整合,那就打開(kāi)你的build.gradle,然后添加下面的依賴(lài):
dependencies {
// your other dependencies
// ...
// Glide
compile 'com.github.bumptech.glide:glide:3.7.0'
// Glide's OkHttp2 Integration
compile 'com.github.bumptech.glide:okhttp-integration:1.4.0@aar'
compile 'com.squareup.okhttp:okhttp:2.7.5'
}
Gradle會(huì)自動(dòng)合入必須的GlideModule到你的Android.Manifest中。Glide會(huì)識(shí)別manifest里的東西,并為所有的網(wǎng)絡(luò)連接使用OkHttp。
Volley
另一方面,如果你偏向于使用Volley,你必須把你的build.gradle依賴(lài)改成下面的:
dependencies {
// your other dependencies
// ...
// Glide
compile 'com.github.bumptech.glide:glide:3.7.0'
// Glide's Volley Integration
compile 'com.github.bumptech.glide:volley-integration:1.4.0@aar'
compile 'com.mcxiaoke.volley:library:1.0.8'
}
這會(huì)添加Volley和集成庫(kù)(integration library)到你的項(xiàng)目中。集成庫(kù)添加GlideModule到你的Android.Manifest文件中。Glide會(huì)自動(dòng)識(shí)別,然后使用Volley作為網(wǎng)絡(luò)連接庫(kù)。沒(méi)有其他的配置要做了!
警號(hào):如果你同時(shí)定義了2個(gè)庫(kù)在你的build.gradle,兩個(gè)都會(huì)被添加。由于Glide不能按照任何特別的順序加載它們,不知道哪個(gè)庫(kù)實(shí)際上被調(diào)用,可能會(huì)導(dǎo)致不穩(wěn)定的結(jié)果。請(qǐng)確保你只添加了一個(gè)集成庫(kù)。
OkHttp 3
如果你想要使用最新的OkHttp 3作為網(wǎng)絡(luò)協(xié)議棧,通過(guò)提供的集成庫(kù)整個(gè)它:
ependencies {
// your other dependencies
// ...
// Glide
compile 'com.github.bumptech.glide:glide:3.7.0'
// Glide's OkHttp3 Integration
compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
}
其他網(wǎng)絡(luò)庫(kù)
如果你是其他網(wǎng)絡(luò)庫(kù)的粉絲,那么就不幸了。Glide并不支持除了Volley、OkHttp2和OkHttp3以外的庫(kù)。然而,你可以通過(guò)在Github上推送一個(gè)請(qǐng)求盡情集成你喜歡的庫(kù)到Glide里。Volley、OkHttp2和OkHttp3的集成可以給你一個(gè)指導(dǎo)方向。
總結(jié)
顯然,集成網(wǎng)絡(luò)庫(kù)非常簡(jiǎn)單,如果你正好使用Gradle作為你編譯系統(tǒng),并不需要進(jìn)一步定制。如果你不使用Gradle,可以看下這里。不久的將來(lái),我們將會(huì)介紹更高級(jí)的定制化GlideModule。敬請(qǐng)期待!