一查蓉、ImageLaoder介紹
? ? <<?Universal ImageLoader 是很早開源的圖片緩存乌询,在早期被很多應(yīng)用使用
多線程下載圖片,圖片可以來源于網(wǎng)絡(luò)豌研,文件系統(tǒng)妹田,項目文件夾assets中以及drawable中等
支持隨意的配置ImageLoader,例如線程池聂沙,圖片下載器秆麸,內(nèi)存緩存策略,硬盤緩存策略及汉,圖片顯示選項以及其他的一些配置
支持圖片的內(nèi)存緩存沮趣,文件系統(tǒng)緩存或者SD卡緩存
支持圖片下載過程的監(jiān)聽
根據(jù)控件(ImageView)的大小對Bitmap進(jìn)行裁剪,減少Bitmap占用過多的內(nèi)存
較好的控制圖片的加載過程坷随,例如暫停圖片加載房铭,重新開始加載圖片,一般使用在ListView,GridView中温眉,滑動過程中暫停加載圖片缸匪,停止滑動的時候去加載圖片
提供在較慢的網(wǎng)絡(luò)下對圖片進(jìn)行加載
?默認(rèn)實現(xiàn)多種內(nèi)存緩存算法這幾個圖片緩存都可以配置緩存算法,不過 ImageLoader 默認(rèn)實現(xiàn)了較多緩存算法类溢,如 Size 最大先刪除凌蔬、使用最少先刪除、最近最少使用闯冷、先進(jìn)先刪除砂心、時間最長先刪除等。
?<
設(shè)計流程:
? ? ImageLoader收到展示和加載圖片的任務(wù)蛇耀,并交給ImageLoaderEngine(創(chuàng)建任務(wù)辩诞,并進(jìn)行任務(wù)調(diào)度)分配到具體的線程池去完成,任務(wù)通過 Cache (本地緩存)及 ImageDownloader (從網(wǎng)絡(luò)獲取圖片)獲取圖片纺涤,中間可能經(jīng)過 BitmapProcessor(圖片處理器) 和 ImageDecoder (圖片解碼)處理译暂,最終轉(zhuǎn)換為Bitmap 交給 BitmapDisplayer 在 ImageAware 中顯示。
? ?注:其中 Cache 分為 MemoryCache(內(nèi)存緩存) 和 DiskCache(硬盤緩存) 兩部分撩炊。
:Processor 資源(圖片)處理器外永,負(fù)責(zé)處理資源,比如旋轉(zhuǎn)拧咳、壓縮象迎、截取等。
二呛踊、Picasso介紹
? ?>> picasso是Square公司開源的一個Android圖形緩存庫,可以實現(xiàn)圖片下載和緩存功能
? ? Picasso不僅實現(xiàn)了圖片異步加載的功能砾淌,還解決了android中加載圖片時需要解決的一些常見問題:
? ?1.在adapter中需要取消已經(jīng)不在視野范圍的ImageView圖片資源的加載,否則會導(dǎo)致圖片錯位谭网,Picasso已經(jīng)解決了這個問題汪厨。
? ?2.使用復(fù)雜的圖片壓縮轉(zhuǎn)換來盡可能的減少內(nèi)存消耗
? ?3.自帶內(nèi)存和硬盤二級緩存功能
>>Picasso設(shè)計與流程設(shè)計
?Picasso 收到加載及顯示圖片的任務(wù),創(chuàng)建 Request 并將它交給 Dispatcher愉择,Dispatcher 分發(fā)任務(wù)到具體 RequestHandler劫乱,任務(wù)通過 MemoryCache 及 Handler(數(shù)據(jù)獲取接口) 獲取圖片,圖片獲取成功后通過 PicassoDrawable 顯示到 Target 中锥涕。
注:Dispatcher 負(fù)責(zé)分發(fā)和處理 Action衷戈,包括提交、暫停层坠、繼續(xù)殖妇、取消、網(wǎng)絡(luò)狀態(tài)變化破花、重試等等谦趣。
?三、Glide簡介
Glide是一個高效座每、開源前鹅、Android設(shè)備上的媒體管理框架,Glide具有獲取峭梳、解碼和展示視頻劇照舰绘、圖片、動畫等功能葱椭,它還有靈活的API捂寿,這些API使開發(fā)者能夠?qū)lide應(yīng)用在幾乎任何網(wǎng)絡(luò)協(xié)議棧里。創(chuàng)建Glide的主要目的有兩個挫以,一個是實現(xiàn)平滑的圖片列表滾動效果(滾動流暢)者蠕,另一個是支持遠(yuǎn)程圖片的獲取、大小調(diào)整和展示
? ?>>特點
GIF動畫的解碼:通過調(diào)用Glide.with(context).load(“圖片路徑“)方法掐松,GIF動畫圖片可以自動顯示為動畫效果踱侣。如果想有更多的控制,還可以使用Glide.with(context).load(“圖片路徑“).asBitmap()方法加載靜態(tài)圖片大磺,使用Glide.with(context).load(“圖片路徑“).asGif()方法加載動畫圖片
本地視頻劇照的解碼:通過調(diào)用Glide.with(context).load(“圖片路徑“)方法抡句,Glide能夠支持Android設(shè)備中的所有視頻劇照的加載和展示
縮略圖的支持:為了減少在同一個view組件里同時加載多張圖片的時間,可以調(diào)用Glide.with(context).load(“圖片路徑“).thumbnail(“縮略比例“).into(“view組件“)方法加載一個縮略圖杠愧,還可以控制thumbnail()中的參數(shù)的大小待榔,以控制顯示不同比例大小的縮略圖
Activity生命周期的集成:當(dāng)Activity暫停和重啟時,Glide能夠做到智能的暫停和重新開始請求,并且當(dāng)Android設(shè)備的連接狀態(tài)變化時锐锣,所有失敗的請求能夠自動重新請求
轉(zhuǎn)碼的支持:Glide的toBytes() 和transcode() 兩個方法可以用來獲取腌闯、解碼和變換背景圖片,并且transcode() 方法還能夠改變圖片的樣式
動畫的支持:新增支持圖片的淡入淡出動畫效果(調(diào)用crossFade()方法)和查看動畫的屬性的功能
OkHttp和Volley的支持:默認(rèn)選擇HttpUrlConnection作為網(wǎng)絡(luò)協(xié)議棧雕憔,還可以選擇OkHttp和Volley作為網(wǎng)絡(luò)協(xié)議棧
其他功能:如在圖片加載過程中姿骏,使用Drawables對象作為占位符、圖片請求的優(yōu)化斤彼、圖片的寬度和高度可重新設(shè)定分瘦、縮略圖和原圖的緩存等功能
<
? ?簡單的講就是 Glide 收到加載及顯示資源的任務(wù),創(chuàng)建 Request 并將它交給RequestManager(任務(wù)管理器)琉苇,Request 啟動 Engine(數(shù)據(jù)獲取引擎) 去數(shù)據(jù)源獲取資源(通過 Fetcher(數(shù)據(jù)獲取器) )嘲玫,獲取到后 Transformation(圖片處理) 處理后交給 Target(目標(biāo))。