【轉】Fresco之強大之餘的痛楚

http://www.jianshu.com/p/5364957dcf49css

 

開始以前

若是你有使用的心得,技巧,踩坑經歷,但願貢獻出來,我會在TODO中慢慢添加(^^)/html

關於Fresco

Fresco 是一個強大的圖片加載組件。
  Fresco 中設計有一個叫作*image pipeline*的模塊。它負責從網絡,從本地文件系統,本地資源加載圖片。爲了最大限度節省空間和CPU時間,它含有3級緩存設計(2級內存,1級文件)。 Fresco 中設計有一個叫作*Drawees*模塊,方便地顯示loading圖,當圖片再也不顯示在屏幕上時,及時地釋放內存和空間佔用。 Fresco 支持 Android2.3(API level 9) 及其以上系統。

若是你還不知道Fresco是什麼?那麼建議必定得去了解下: Fresco官方文檔 ; 同時, 建議在看文檔的時候優先選擇閱讀英文文檔, 由於中文版文檔可能有滯後的狀況,這樣會避免不少沒必要要的麻煩。另外,當有問題產生時, 建議去其Fresco Github Issues去進行翻閱查找, 此處匯聚了許多Fresco使用和問題的反饋及解答,每每可能會解決你的一些基本疑惑,甚至,你本身Open New Issue亦無不可。android

使用Fresco

這其實不是我寫此文章的目的, 由於關於使用, 官方文檔已經足夠詳細;而且多篇博客已經進行了解讀和使用引導,甚至可運行閱讀和Demo。
什麼?想在這兒也學習學習,好吧, 人都是懶惰的,況且咱們程序員~~!
那麼,我就簡單作個收集吧(也不就是Google Or Baidu Or ... 其餘搜索引擎):git

若是你以爲你有更好的連接,請推薦哦程序員

中文文檔
http://www.fresco-cn.org/ ; 若是真心讀不懂英文或者不想讀, 那麼這裏,你能夠去看看。
導入官方示例
http://www.cnblogs.com/stay/p/4398432.html; 簡單看了下,還不錯, 講的相對詳細,我並未細看。由於其實導入和編譯項目該是開發的基本功吧,(*^__^*) 嘻嘻……
簡單使用
http://blog.csdn.net/y1scp/article/details/49245535; 很是詳細的使用教程了吧,做者仍是比較有心的,點個贊。
進階研究

1.Fresco源碼解析 - 本地編譯
2.Fresco源碼解析 - Hierarachy-View-Controller
3.Fresco源碼解析 - DraweeView
4.Fresco源碼解析 - 初始化過程分析
5.Fresco源碼解析 - DataSource怎樣存儲數據github

這是一個做者的系列博客吧,具體內容還沒時間細細品讀,可是能堅持寫,可見頗有耐心。web

Update 進階1: 2015/12/22緩存

昨晚閒來無事逛微博, 發現一個0.7.0版本Fresco的源碼解析,看了看, 非常不錯,在此更新推薦給你們:ruby

Fresco-Source-Analysis
目前看到最好的Fresco的源碼解讀了吧網絡

Demo

Kaede

Fresco-Sample-Usage
這個算是一個不錯的示例項目吧,能夠參考很多東西,具體對項目的介紹,本身去看doc,或者簡書中Facebook開源的Android圖片加載庫Fresco的Demo項目也有介紹;

Huqiu Liao

fresco-demo-for-gradle
秋百萬做品,絕對精品。 有個圖片加載開源的簡單對比,用法也不少,很是有參考價值。值得一提的是,貌似中文文檔也是秋百萬的做品fresco-docs-cn,能夠去觀摩一下,我不願定,可是感受是。

開源庫使用之痛

Fresco強大,卻也並不完美,但一直在更新,因此,無論你考慮使用,都建議持續關注開源庫的發展和更新,由於說不定,就會有好消息,讓你學習,讓你輕鬆。

本人是很是欣賞開源做者的各類開源做品,也樂於使用,只是,開源庫之初,總有不少不盡如人意的地方,這也是常說的,~

是的,這纔是本文的重點

本人在新項目中使用Fresco庫,很是感謝Facebook~

實際使用, 就會遇到各類問題,而我之因此寫,也只是由於有些問題, 確實值得咱們注意, 寫下了,防止本身下次再犯, 同時,也給遇到相似問題的一些參考吧:

通常狀況下,直接 Fresco.initialized(context) 初始化後,在佈局中進行以下引用

<com.facebook.drawee.view.SimpleDraweeView android:id="@+id/my_image_view" android:layout_width="130dp" android:layout_height="130dp" fresco:placeholderImage="@drawable/ic_launcher" />

就已經能夠應付大部分狀況了, 也無需擔憂其餘問題;
稍等: 吐槽下, 竟然寬高基礎使用是必須設置具體的dp值的

但是,本人在使用時,恰恰就是用來作相冊多選(自做孽,(⊙﹏⊙)b):

那麼問題來了 ,

首先的問題就是OOM。。。

額, 這麼強大的庫也能OOM?
都知道,多圖加載確實好內存,但是,別的三方庫是OK的哇,什麼狀況?

固然是使用姿式不太對, 是的, 宮格顯示就是大圖顯示, 致使拖動都卡頓, 因而, 作了優化:

public static void showThumb(Uri uri, SimpleDraweeView draweeView){ ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri) .setResizeOptions(new ResizeOptions(DensityUtil.dip2px(144), DensityUtil.dip2px(144))) .build(); DraweeController controller = Fresco.newDraweeControllerBuilder() .setImageRequest(request) .setOldController(draweeView.getController()) .setControllerListener(new BaseControllerListener<ImageInfo>()) .build(); draweeView.setController(controller); }

乍一看,好爽,自動替我Resize了圖片, 還抽取個方法, 好複用, 好爽,O(∩_∩)O~;
Tip: 若是Resize後還會出現問題,那麼可能參數設置的問題了吧,細查下寬高大小之類吧

運行試了試, 咦~ 滑動好順暢。。。難道就行了?Oh~No, 新問題出現了,

圖片顯示不全 (具體表現爲顯示爲純白色,或純黑色)

什麼鬼?
也是疑惑異常,以前不Resize以前還能顯示的,怎麼如今反而有些顯示不出了?難道是這個方法有什麼問題?
遂查看官方文檔Resizing,看完心中大呼: 法克~ 細節,細節, 細節


U0~EIQSZBP5ELOH$@`EVU%3.png

人家文檔說的很清楚嘛,此方法 只支持JPG, 只支持JPG, 只支持JPG, ,心裏
此時是崩潰的,心中想, 只支持JPG怎麼夠用,如今png的,webp的各類格式的怎麼辦...

往下順着看, 好吧, 哈哈, 請容許我竊喜,是的,官方提供了方法來支持更多格式:


(5LX_1O0V997KM$JL5R_ULR.png

Tip: 此處記得,不是setDownsampleEnabled(true)就能夠了,還得調用以前的Resize方法,人家文檔也說的很明白了

好吧, 也許即便如此,有些人還不知如何設定這個屬性呢,其實很簡單哇,人家Configuration是能夠定義的哇, 初始化的時候進行定義

ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this) .setDownsampleEnabled(true) .build(); Fresco.initialize(this, config);

嗯, 是的, Fresco和其餘圖片加載框架同樣,也是支持自定義一些Config屬性的,支持不少,什麼DiskCacheConfig、ImagePipelineConfig、MemoryCacheParams等不少,自行看官方文檔進行腦補吧~

好吧,問題是否解決了呢,本人運行看了看,ok, 以前白屏的地方,圖片出來了,滑動看看呢, 還不錯哦。

更多

固然,也還有不少使用上的問題,我會再使用的同時在此繼續更新一些,以使本身能溫故而知新。

另外,我是喜歡作好人的, 若是你懶, 那麼,當你出現問題,有幾個地方你得去瞅瞅咯:

Fresco Issue 567 這裏有一些PNG圖片展現的TooManyBitmapsException

Fresco Issue 84 能夠參考看看評論中解決問題的過程

Fresco Issue 738 不知道怎麼設置緩存?可做參考

本人也單獨配置了一份很詳細的Config, 你們也能夠根據本身的須要進行個性化配置。

todo 2015/12/18

此處佔坑, 用來總結更多~~

結尾

不少時候, 知道強大的東西還不夠,咱們還都會用,會用還不夠,甚至還得去研習如何用的更精, 用精對於好多人依然不夠, 由於還要知道其原理, 甚至學習和本身構建;

最後, 本人正在技術探索的路上, 苦於平時工做壓力較大, 時間相對較少, 不免寫的過程了有疏漏, 甚至更多,若剛好, 你看到了有問題之處, 或者有建議修改, 那麼, 請提出來吧, 幫助我進步 , 謝謝~



文/Aegis(簡書做者) 原文連接:http://www.jianshu.com/p/5364957dcf49 著做權歸做者全部,轉載請聯繫做者得到受權,並標註「簡書做者」。
相關文章
相關標籤/搜索