Android:簡介 Gilde

Gilde簡單介紹:

Glide是一款由圖片加載框架,使得我們可以在Android平臺上以極度簡單的方式加載和展示圖片
Glide.with(this).load(url).into(imageView)這是Glide的核心代碼 他這行代碼包括加載網絡上的圖片均函、加載手機本地的圖片座享、加載應用資源中的圖片
Glide.with()方法用于創(chuàng)建一個加載圖片的實例
load()方法,這個方法用于指定待加載的圖片資源
into()方法晶通,這個方法就很簡單了,我們希望讓圖片顯示在哪個ImageView
在Gilde中我們可以指定加載圖片的大小使用override()方法 在括號中傳入自定義加載圖片的大小

占位符:
在Gilde當中因為我們加載網絡數據的時候 需要稍等一會圖片才會加載出來 我們不能顯示空白頁面 所以我們要用到占位圖我們只需要在剛才的三步走之間插入了一個placeholder()方法 在括號里傳入一個圖片路徑就行了哟玷,我們在運行的時候 佷可能看不見占位圖圖片 因為Gilde有緩存功能 在第一次我們記載圖片的時候他就已經緩存下來了 所以后面我們再次使用的時候 就可能看不見占位圖圖片 如果我們想看見 占位圖圖片可以在使用占位圖方法后面加一個diskCacheStrategy()方法狮辽,并傳入DiskCacheStrategy.NONE參數,這樣就可以禁用掉Glide的緩存功能巢寡。

異常占位符
這只是占位圖的一種喉脖,除了這種加載占位圖之外,還有一種異常占位圖抑月。異常占位圖就是指树叽,如果因為某些異常情況導致圖片加載失敗,比如說手機網絡信號不好谦絮,這個時候就顯示這張異常占位圖 error()方法就是可以指定異常占位圖

Gilde有一個很強大的功能Glide是支持加載動態(tài)圖片的题诵。须误,Picasso是不會支持加載動態(tài)圖片的 Gilde在加載圖片的時候他在加載圖片時會自動識別他的圖片格式 然后對他進行加載
在Gilde中有很多方法 加載動態(tài)圖片時 我們就想要第一幀 調用asBitmap()
只加載動態(tài)圖片我們使用asGif()方法替代asBitmap()方法 如果不是動態(tài)圖片 那么會加載失敗

Gilde源碼分析:

With()
在Gilde源碼中 with()方法是一組靜態(tài)方法京痢,它有好幾個方法重載with()方法的重載種類非常多,既可以傳入Activity,也可以傳入Fragment或者是Context 每一個with()方法重載的代碼都非常簡單携茂,都是先調用RequestManagerRetriever的靜態(tài)get()方法得到一個RequestManagerRetriever對象,這個靜態(tài)get()方法就是一個單例實現,沒什么需要解釋的咐扭。然后再調用RequestManagerRetriever的實例get()方法蝗肪,去獲取RequestManager對象。

RequestManagerRetriever類中看似有很多個get()方法的重載,什么Context參數,Activity參數,Fragment參數等等醇疼,實際上只有兩種情況而已,即傳入Application類型的參數陕赃,和傳入非Application類型的參數。
當我們在Glide.with()方法中傳入的是一個Application對象,那么這里就會調用帶有Context參數的get()方法重載忱反,然后會調用getApplicationManager()方法來獲取一個RequestManager對象
當我傳入非Application參數的情況。不管你在Glide.with()方法中傳入的是Activity米者、FragmentActivity蔓搞、v4包下的Fragment机蔗、還是app包下的Fragment梆掸,最終的流程都是一樣的咱枉,那就是會向當前的Activity當中添加一個隱藏的Fragment徒恋。為什么要添加一個隱藏的Fragment呢?因為Glide需要知道加載的生命周期
我們是在非主線程當中使用的Glide欢伏,那么不管你是傳入的Activity還是Fragment入挣,都會被強制當成Application來處理 with()方法其實就是為了得到一個RequestManager對象而已,然后Glide會根據我們傳入with()方法的參數來確定圖片加載的生命周期

Load()
load()方法是在RequestManager類當中的,在RequestManager中也有很多個load()方法的重載 load()方法首先調用fromString()方法硝拧,再調用load()方法径筏,然后把傳入的圖片URL地址傳進去 fromString()方法調用了loadGeneric()方法,并且指定參數為String.class河爹,因為load()方法傳入的是一個字符串參數 主要的工作都是在loadGeneric()方法中進行的
當中會調用兩個方法來獲取ModelLoader對象 Glide.buildStreamModelLoader()方法和Glide.buildFileDescriptorModelLoader()方法 ModelLoader對象是用于加載圖片的匠璧,而我們給load()方法傳入不同類型的參數,這里也會得到不同的ModelLoader對象 我們傳入String.class會得到一個StreamStringLoader對象咸这,它是實現了ModelLoader接口的
loadGeneric()方法是要返回一個DrawableTypeRequest對象的夷恍,因此在loadGeneric()方法的最后又去new了一個DrawableTypeRequest對象 然后把剛才獲得的ModelLoader對象傳進去,

Drawable4TypeRequest的作用它提供了asBitmap()和asGif()這兩個方法媳维,分別是用于強制指定加載靜態(tài)圖片和動態(tài)圖片 DrawableTypeRequest的父類是DrawableRequestBuilder并不是load

Into()

into()方法的具體都是在DrawableRequestBuilder的父類GenericRequestBuilder中 在
GenericRequestBuilder中有一個glide.buildImageViewTarget()方法酿雪,這個方法會構建出一個Target對象,Target對象則是用來最終展示圖片用的侄刽,在buildTarget()方法中會根據傳入的class參數來構建不同的Target對象指黎。class參數其實基本上只有兩種情況,如果你在使用Glide加載圖片的時候調用了asBitmap()方法州丹,那么這里就會構建出BitmapImageViewTarget對象醋安,否則的話構建的都是GlideDrawableImageViewTarget對象

Glide緩存
在緩存這一功能上,Glide又將它分成了兩個模塊墓毒,一個是內存緩存吓揪,一個是硬盤緩存。這兩個緩存模塊的作用各不相同所计,內存緩存的主要作用是防止應用重復將圖片數據讀取到內存當中柠辞,而硬盤緩存的主要作用是防止應用重復從網絡或其他地方重復下載和讀取數據。內存緩存和硬盤緩存的相互結合才構成了Glide極佳的圖片緩存效果
內存緩存:
Gilde默認是緩存 當我們不想緩存時 只需要調用skipMemoryCache()方法并傳入true主胧,就表示禁用掉Glide的內存緩存功能 Glide內存緩存的實現使用的LruCache算法叭首。不過除了LruCache算法之外,Glide還結合了一種弱引用的機制踪栋,共同完成了內存緩存功能

硬盤緩存:
調用diskCacheStrategy()方法并傳入DiskCacheStrategy.NONE焙格,就可以禁用掉Glide的硬盤緩存功能 在diskCacheStrategy()中有四種參數
?DiskCacheStrategy.NONE: 表示不緩存任何內容。
?DiskCacheStrategy.SOURCE: 表示只緩存原始圖片己英。
?DiskCacheStrategy.RESULT: 表示只緩存轉換過后的圖片(默認選項)间螟。
?DiskCacheStrategy.ALL : 表示既緩存原始圖片,也緩存轉換過后的圖片损肛。

Glide和Picasso的區(qū)別
Glide是支持加載動態(tài)圖片的厢破。,Picasso是不會支持加載動態(tài)圖片的
相對于加載圖片Picasso比Glide開銷要大治拿,但是Picasso加載的圖片比Glide質量要好
原因在于Picasso是加載了全尺寸的圖片到內存摩泪,然后讓GPU來實時重繪大小。而Glide加載的大小和ImageView的大小是一致的劫谅,因此開銷小
Glide和Picasso都是非常完美的庫见坑。Glide加載圖像以及磁盤緩存的方式都要優(yōu)于Picasso,速度更快捏检,并且Glide更有利于減少OutOfMemoryError的發(fā)生荞驴,GIF動畫是Glide的殺手锏。不過Picasso的圖片質量更高
因為Glide默認的Bitmap格式是RGB_565 贯城,比PicassoARGB_8888格式的內存開銷要小一半

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末熊楼,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子能犯,更是在濱河造成了極大的恐慌鲫骗,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踩晶,死亡現場離奇詭異执泰,居然都是意外死亡,警方通過查閱死者的電腦和手機渡蜻,發(fā)現死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門术吝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茸苇,你說我怎么就攤上這事排苍。” “怎么了税弃?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵纪岁,是天一觀的道長。 經常有香客問我则果,道長幔翰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任西壮,我火速辦了婚禮遗增,結果婚禮上,老公的妹妹穿的比我還像新娘款青。我一直安慰自己做修,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饰及,像睡著了一般蔗坯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上燎含,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天宾濒,我揣著相機與錄音,去河邊找鬼屏箍。 笑死绘梦,一個胖子當著我的面吹牛,可吹牛的內容都是我干的赴魁。 我是一名探鬼主播卸奉,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼颖御!你這毒婦竟也來了榄棵?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤郎嫁,失蹤者是張志新(化名)和其女友劉穎秉继,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體泽铛,經...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡尚辑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了盔腔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杠茬。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弛随,靈堂內的尸體忽然破棺而出瓢喉,到底是詐尸還是另有隱情,我是刑警寧澤舀透,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布栓票,位于F島的核電站,受9級特大地震影響愕够,放射性物質發(fā)生泄漏走贪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一惑芭、第九天 我趴在偏房一處隱蔽的房頂上張望坠狡。 院中可真熱鬧,春花似錦遂跟、人聲如沸逃沿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凯亮。三九已至边臼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間触幼,已是汗流浹背硼瓣。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工究飞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留置谦,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓亿傅,卻偏偏與公主長得像媒峡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子葵擎,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內容

  • 【Android 庫 Glide】 引用 Android圖片加載框架最全解析(一)谅阿,Glide的基本用法Andro...
    Rtia閱讀 5,410評論 0 22
  • 一、簡介 在泰國舉行的谷歌開發(fā)者論壇上酬滤,谷歌為我們介紹了一個名叫Glide的圖片加載庫签餐,作者是bumptech。這...
    天天大保建閱讀 7,459評論 2 28
  • 7.1 壓縮圖片 一盯串、基礎知識 1氯檐、圖片的格式 jpg:最常見的圖片格式。色彩還原度比較好体捏,可以支持適當壓縮后保持...
    AndroidMaster閱讀 2,496評論 0 13
  • 學習來源:郭霖大師博客地址 1冠摄、圖片加載框架挺多,如Volley几缭、Glide河泳、Picasso、Fresco年栓、本次是...
    子謙寶寶閱讀 1,749評論 0 6
  • 作者簡介 原創(chuàng)微信公眾號郭霖 WeChat ID: guolin_blog 現在Android上的圖片加載框架非常...
    木木00閱讀 4,280評論 1 17