Glide 原始碼解析
泰國舉行的谷歌開發者論壇上,谷歌為我們介紹了一個名叫 Glide 的圖片載入庫,作者是bumptech。這個庫被廣泛的運用在google的開源專案中,包括2014年google I/O大會上釋出的官方app。Glide和Picasso使用上有90%的相似度,但是內部實現機制有很大區別 Glide介紹。
1.主要特點
(1)支援Memory和Disk圖片快取。
(2)支援gif和webp格式圖片。
(3)根據Activity/Fragment生命週期自動管理請求。
(4)使用Bitmap Pool可以使Bitmap複用。
(5)對於回收的Bitmap會主動呼叫recycle,減小系統回收壓力。
2. 總體設計
基本概念
RequestManager:請求管理,每一個Activity都會建立一個RequestManager,根據對應Activity的生命週期管理該Activity上所以的圖片請求。
Engine:載入圖片的引擎,根據Request建立EngineJob和DecodeJob。
EngineJob:圖片載入。
DecodeJob:圖片處理。
流程圖
這裡是大概的總體流程圖, 具體的細節中流程下面繼續分析。
3. 核心類介紹
3.1 Gilde
用於儲存整個框架中的配置。
重要方法:
- public
staticRequestManagerwith(FragmentActivityactivity){- RequestManagerRetrieverretriever=RequestManagerRetriever.get();
- returnretriever.get(activity);
- }
用於建立RequestManager,這裡是Glide通過Activity/Fragment生命週期管理Request原理所在,這個類很關鍵、很關鍵、很關鍵,重要的事情我只說三遍。
主要原理是建立一個自定義Fragment,然後通過自定義Fragment生命週期操作RequestManager,從而達到管理Request。
3.2 RequestManagerRetriever
- RequestManagersupportFragmentGet(Contextcontext,FragmentManagerfm){
- SupportRequestManagerFragmentcurrent=getSupportRequestManagerFragment(fm);
- RequestManagerrequestManager=current.getRequestManager();
- if(requestManager==null){
- requestManager=newRequestManager(context,current.getLifecycle(),current.getRequestManagerTreeNode());
- current.setRequestManager(requestManager);
- }
- returnrequestManager;
- }
這裡判斷是否只當前RequestManagerFragment是否存在RequestManager,保證一個Activity對應一個RequestManager, 這樣有利於管理一個Activity上所有的Request。建立RequestManager的時候會將RequestManagerFragment中的回撥介面賦值給RequestManager,達到RequestManager監聽RequestManagerFragment的生命週期。
3.3 RequestManager
成員變數:
(1)Lifecycle lifecycle,用於監聽RequestManagerFragment生命週期。
(2)RequestTracker requestTracker, 用於儲存當前RequestManager所有的請求和帶處理的請求。
重要方法:
- @Override
- //開始暫停的請求
- publicvoidonStart(){
- resumeRequests();
- }
- //停止所有的請求
- @Override
- publicvoidonStop(){
相關推薦
Glide 原始碼解析
泰國舉行的谷歌開發者論壇上,谷歌為我們介紹了一個名叫 Glide 的圖片載入庫,作者是bumptech。這個庫被廣泛的運用在google的開源專案中,包括2014年google I/O大會上釋出的官方app。Glide和Picasso使用上有90%的相似度,但是內部實
Glide原始碼解析篇之框架主體結構(一)
Gide作為Android最受歡迎的圖片載入庫之一,一直深受Android開發者的喜愛,很大原因就是它的功能極其強大,而使用卻異常簡單。無論是網路、快取、特效,佔位圖,Glide團隊都為開發者考慮的非常細緻,也正因為這個原因,Glide框架的原始碼變得極其複雜,
Android Glide原始碼解析
功能介紹 由於這篇文章使用glide的老版本,因此有些使用方法可能不太一致了。 本文基於github上Glide最新程式碼4.0.0版本做解析。 最基本的使用方式如下: Glide.with(this) .asDr
Glide原始碼解析一,初始化
轉載請標明出處:https:////www.cnblogs.com/tangZH/p/12409849.html Glide作為一個強大的圖片載入框架,已經被android官方使用,所以,明白Glide的載入流程以及原理對加深我們對glide的理解是很重要的。 本文基於glide 4.11 Glide.wi
Glide原始碼(基於4.8版本)解析
Glide是一款由Bump Technologies開發的圖片載入框架,使得我們可以在Android平臺上以極度簡單的方式來載入和展示圖片。 使用Glide來載入網路圖片非常簡單,通過Glide.with(this).load(url).into(imageView)這樣的一句程式碼
Glide載入圖片流程原始碼解析
網上Glide原始碼解析的資料比較多,但魚龍混雜,so我決定還是自己跟一遍原始碼吧,看原始碼真的是一件爆炸的事,好幾次想放棄,但最後還是堅持下來了,唉。 首先先來捋一遍Glide的具體用法,從具體用法出發我們再來分析Glide內部都是怎麼來實現這些方法的。
Netty進階:Futrue&Promise原始碼解析
文章目錄 1. Future&Promise 2. AbstractFuture 3.Completefuture 4.Channelfuture&Completechannel
大資料基礎(1)zookeeper原始碼解析
五 原始碼解析 public enum ServerState { LOOKING, FOLLOWING, LEADING, OBSERVING;}zookeeper伺服器狀態:剛啟動LOOKING,follower是FOLLOWING,leader是LEADING,observer是
Android框架原始碼解析之(四)Picasso
這次要分析的原始碼是 Picasso 2.5.2 ,四年前的版本,用eclipse寫的,但不影響這次我們對其原始碼的分析 地址:https://github.com/square/picasso/tree/picasso-parent-2.5.2 Picasso的簡單使用
Android框架原始碼解析之(三)ButterKnife
注:所有分析基於butterknife:8.4.0 原始碼目錄:https://github.com/JakeWharton/butterknife 其中最主要的3個模組是: Butterknife註解處理器https://github.com/JakeWharton/
Android框架原始碼解析之(二)OKhttp
原始碼在:https://github.com/square/okhttp 包實在是太多了,OKhttp核心在這塊https://github.com/square/okhttp/tree/master/okhttp 直接匯入Android Studio中即可。 基本使用:
Android框架原始碼解析之(一)Volley
前幾天面試CVTE,HR面掛了。讓內部一個學長幫我查看了一下面試官評價,發現二面面試官的評價如下: 廣度OK,但缺乏深究能力,深度與實踐不足 原始碼:只能說流程,細節程式碼不清楚,retrofit和volley都是。 感覺自己一方面:自己面試技巧有待提高吧(框
HashMap原始碼解析(JDK8)
前言 這段時間有空,專門填補了下基礎,把常用的ArrayList、LinkedList、HashMap、LinkedHashMap、LruCache原始碼看了一遍,List相對比較簡單就不單獨介紹了,Map準備用兩篇的篇幅,分別介紹HashMap和(LruCache+LinkedHa
原始碼解析--Long、long型別的比較遇到的問題
Long、long型別的比較遇到的問題: 1、long 是基本型別 Long是物件型別。 public static void main(String[] args) { Long A = 127l; Long B = 127l; long C = 127; l
CopyOnWriteArrayList實現原理以及原始碼解析
CopyOnWriteArrayList實現原理以及原始碼解析 1、CopyOnWrite容器(併發容器) Copy-On-Write簡稱COW,是一種用於程式設計中的優化策略。 其基本思路是,從一開始大家都在共享同一個內容,當某個人想要修改這個內容的時候,才
LinkedList實現原理以及原始碼解析(1.7)
LinkedList實現原理以及原始碼解析(1.7) 在1.7之後,oracle將LinkedList做了一些優化, 將1.6中的環形結構優化為了直線型了連結串列結構。 1、LinkedList定義: public class LinkedList<E>
ArrayList實現原理以及原始碼解析(補充JDK1.7,1.8)
ArrayList實現原理以及原始碼解析(補充JDK1.7,1.8) ArrayList的基本知識在上一節已經討論過,這節主要看ArrayList在JDK1.6到1.8的一些實現變化。 JDK版本不一樣,ArrayList類的原始碼也不一樣。 1、ArrayList類結構:
ArrayList實現原理以及原始碼解析(JDK1.6)
ArrayList實現原理以及原始碼解析(JDK1.6) 1、ArrayList ArrayList是基於陣列實現的,是一個動態陣列,其容量能自動增長,類似於C語言中的動態申請記憶體,動態增長記憶體。 ArrayList不是執行緒安全的,只能用在單執行緒環境下。
ConcurrentHashMap實現原理以及原始碼解析
ConcurrentHashMap實現原理以及原始碼解析 ConcurrentHashMap是Java1.5中引用的一個執行緒安全的支援高併發的HashMap集合類。 1、執行緒不安全的HashMap 因為多執行緒環境下,使用Hashmap進行put操作會引起死迴圈
Java併發程式設計高階技術-高效能併發框架原始碼解析與實戰(資源同步)
第1章 課程介紹(Java併發程式設計進階課程) 什麼是Disruptor?它一個高效能的非同步處理框架,號稱“單執行緒每秒可處理600W個訂單”的神器,本課程目標:徹底精通一個如此優秀的開源框架,面試秒殺面試官。本章會帶領小夥伴們先了解課程大綱與重點,然後模擬千萬,億級資料進行壓力測試。讓大