fresco要點記錄

本文參考
https://github.com/facebook/fresco
https://juejin.im/post/5a7568825188257a7a2d9ddb

概述

近期使用到fresco,各要點總結記錄下。本文內容多爲轉載或翻譯。

官方描述特點

fresco官方的描述中主要有以下幾個特點:

  1. 原生的bitmap在被渲染出來後,native的資源就會被回收。這個操作是在UI線程進行的,因此會造成卡頓。
    fresco中bitmap在被渲染出來後不自動回收native資源,由fresco框架來控制回收時機。
  2. Bitmap解碼是非常消耗CPU資源的,當消耗過大時會引起UI阻塞。
    在fresco中就對解碼後的bitmap進行了緩存,避免解碼造成UI卡頓。

關鍵類

DraweeView:繼承於ImageView,只是簡單的讀取xml文件的一些屬性值和做一些初始化的工作,圖層管理交由Hierarchy負責,圖層數據獲取交由負責。
DraweeHierarchy:由多層Drawable組成,每層Drawable提供某種功能(例如:縮放、圓角)。
DraweeController:控制數據的獲取與圖片加載,向pipeline發出請求,並接收相應事件,並根據不同事件控制Hierarchy,從DraweeView接收用戶的事件,然後執行取消網絡請求、回收資源等操作。
DraweeHolder:統籌管理Hierarchy與DraweeHolder。
ImagePipeline:Fresco的核心模塊,用來以各種方式(內存、磁盤、網絡等)獲取圖像。
Producer/Consumer:Producer也有很多種,它用來完成網絡數據獲取,緩存數據獲取、圖片解碼等多種工作,它產生的結果由Consumer進行消費。
IO/Data:這一層便是數據層了,負責實現內存緩存、磁盤緩存、網絡緩存和其他IO相關的功能。

架構

在這裏插入圖片描述

發佈了255 篇原創文章 · 獲贊 751 · 訪問量 117萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章