Fresco之強(qiáng)大之余的痛楚

開(kāi)始之前

如果你有使用的心得狞玛,技巧,踩坑經(jīng)歷,希望貢獻(xiàn)出來(lái)邮偎,我會(huì)在TODO中慢慢添加(^^)/

關(guān)于Fresco

  Fresco 是一個(gè)強(qiáng)大的圖片加載組件。
  Fresco 中設(shè)計(jì)有一個(gè)叫做*image pipeline*的模塊义黎。它負(fù)責(zé)從網(wǎng)絡(luò)禾进,從本地文件系統(tǒng),本地資源加載圖片廉涕。為了最大限度節(jié)省空間和CPU時(shí)間泻云,它含有3級(jí)緩存設(shè)計(jì)(2級(jí)內(nèi)存,1級(jí)文件)狐蜕。
  Fresco 中設(shè)計(jì)有一個(gè)叫做*Drawees*模塊宠纯,方便地顯示loading圖,當(dāng)圖片不再顯示在屏幕上時(shí)层释,及時(shí)地釋放內(nèi)存和空間占用婆瓜。
  Fresco 支持 Android2.3(API level 9) 及其以上系統(tǒng)。

如果你還不知道Fresco是什么湃累?那么建議一定得去了解下: Fresco官方文檔 ; 同時(shí)勃救, 建議在看文檔的時(shí)候優(yōu)先選擇閱讀英文文檔碍讨, 因?yàn)橹形陌嫖臋n可能有滯后的情況,這樣會(huì)避免很多不必要的麻煩蒙秒。另外勃黍,當(dāng)有問(wèn)題產(chǎn)生時(shí), 建議去其Fresco Github Issues去進(jìn)行翻閱查找晕讲, 此處匯聚了許多Fresco使用和問(wèn)題的反饋及解答覆获,往往可能會(huì)解決你的一些基本疑惑,甚至瓢省,你自己Open New Issue亦無(wú)不可弄息。

使用Fresco

這其實(shí)不是我寫(xiě)此文章的目的, 因?yàn)殛P(guān)于使用勤婚, 官方文檔已經(jīng)足夠詳細(xì)摹量;并且多篇博客已經(jīng)進(jìn)行了解讀和使用引導(dǎo),甚至可運(yùn)行閱讀和Demo馒胆。
什么缨称?想在這兒也學(xué)習(xí)學(xué)習(xí),好吧祝迂, 人都是懶惰的睦尽,何況我們程序員~~!
那么型雳,我就簡(jiǎn)單做個(gè)收集吧(也不就是Google Or Baidu Or ... 其他搜索引擎):

如果你覺(jué)得你有更好的鏈接当凡,請(qǐng)推薦哦

中文文檔
    http://www.fresco-cn.org/ ; 如果真心讀不懂英文或者不想讀纠俭, 那么這里沿量,你可以去看看。
導(dǎo)入官方示例
    http://www.cnblogs.com/stay/p/4398432.html冤荆; 簡(jiǎn)單看了下欧瘪,還不錯(cuò), 講的相對(duì)詳細(xì)匙赞,我并未細(xì)看佛掖。因?yàn)槠鋵?shí)導(dǎo)入和編譯項(xiàng)目該是開(kāi)發(fā)的基本功吧,(*^__^*) 嘻嘻……
簡(jiǎn)單使用
    http://blog.csdn.net/y1scp/article/details/49245535; 非常詳細(xì)的使用教程了吧涌庭,作者還是比較有心的芥被,點(diǎn)個(gè)贊。
進(jìn)階研究

1.Fresco源碼解析 - 本地編譯
2.Fresco源碼解析 - Hierarachy-View-Controller
3.Fresco源碼解析 - DraweeView
4.Fresco源碼解析 - 初始化過(guò)程分析
5.Fresco源碼解析 - DataSource怎樣存儲(chǔ)數(shù)據(jù)

這是一個(gè)作者的系列博客吧坐榆,具體內(nèi)容還沒(méi)時(shí)間細(xì)細(xì)品讀拴魄,但是能堅(jiān)持寫(xiě),可見(jiàn)很有耐心。

** Update 進(jìn)階1: 2015/12/22**

昨晚閑來(lái)無(wú)事逛微博, 發(fā)現(xiàn)一個(gè)0.7.0版本Fresco的源碼解析,看了看, 很是不錯(cuò),在此更新推薦給大家:

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

Demo

Kaede

Fresco-Sample-Usage
這個(gè)算是一個(gè)不錯(cuò)的示例項(xiàng)目吧匹中,可以參考不少東西夏漱,具體對(duì)項(xiàng)目的介紹,自己去看doc顶捷,或者簡(jiǎn)書(shū)中Facebook開(kāi)源的Android圖片加載庫(kù)Fresco的Demo項(xiàng)目也有介紹挂绰;

** Huqiu Liao **

fresco-demo-for-gradle
秋百萬(wàn)作品,絕對(duì)精品服赎。 有個(gè)圖片加載開(kāi)源的簡(jiǎn)單對(duì)比葵蒂,用法也很多,非常有參考價(jià)值重虑。值得一提的是践付,貌似中文文檔也是秋百萬(wàn)的作品fresco-docs-cn,可以去觀摩一下,我不肯定缺厉,但是感覺(jué)是永高。

開(kāi)源庫(kù)使用之痛

Fresco強(qiáng)大,卻也并不完美提针,但一直在更新乏梁,所以,不管你考慮使用关贵,都建議持續(xù)關(guān)注開(kāi)源庫(kù)的發(fā)展和更新,因?yàn)檎f(shuō)不定卖毁,就會(huì)有好消息揖曾,讓你學(xué)習(xí),讓你輕松亥啦。

本人是非常欣賞開(kāi)源作者的各種開(kāi)源作品炭剪,也樂(lè)于使用,只是翔脱,開(kāi)源庫(kù)之初奴拦,總有很多不盡如人意的地方,這也是常說(shuō)的届吁,~

是的错妖,這才是本文的重點(diǎn)

本人在新項(xiàng)目中使用Fresco庫(kù),非常感謝Facebook~

實(shí)際使用疚沐, 就會(huì)遇到各種問(wèn)題暂氯,而我之所以寫(xiě),也只是因?yàn)橛行﹩?wèn)題亮蛔, 確實(shí)值得我們注意痴施, 寫(xiě)下了,防止自己下次再犯, 同時(shí)辣吃,也給遇到類(lèi)似問(wèn)題的一些參考吧:

一般情況下动遭,直接 Fresco.initialized(context) 初始化后,在布局中進(jìn)行如下引用

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

就已經(jīng)可以應(yīng)付大部分情況了神得, 也無(wú)需擔(dān)心其他問(wèn)題厘惦;
** 稍等: 吐槽下, 居然寬高基礎(chǔ)使用是必須設(shè)置具體的dp值的 **

可是循头,本人在使用時(shí)绵估,偏偏就是用來(lái)做相冊(cè)多選(自作孽,(⊙﹏⊙)b):

那么問(wèn)題來(lái)了 卡骂,

首先的問(wèn)題就是OOM国裳。。全跨。

額缝左, 這么強(qiáng)大的庫(kù)也能OOM?
都知道,多圖加載確實(shí)好內(nèi)存浓若,可是渺杉,別的三方庫(kù)是OK的哇,什么情況挪钓?

當(dāng)然是使用姿勢(shì)不太對(duì)是越, 是的, 宮格顯示就是大圖顯示碌上, 導(dǎo)致拖動(dòng)都卡頓倚评, 于是, 做了優(yōu)化:

  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);
  }

乍一看馏予,好爽天梧,自動(dòng)替我Resize了圖片, 還抽取個(gè)方法霞丧, 好復(fù)用呢岗, 好爽,O(∩_∩)O~蛹尝;
** Tip: 如果Resize后還會(huì)出現(xiàn)問(wèn)題后豫,那么可能參數(shù)設(shè)置的問(wèn)題了吧,細(xì)查下寬高大小之類(lèi)吧 **

運(yùn)行試了試突那, 咦~ 滑動(dòng)好順暢硬贯。。陨收。難道就好了饭豹?Oh~No鸵赖, 新問(wèn)題出現(xiàn)了,

** 圖片顯示不全 (具體表現(xiàn)為顯示為純白色拄衰,或純黑色)**

什么鬼它褪?
也是疑惑異常,之前不Resize之前還能顯示的翘悉,怎么現(xiàn)在反而有些顯示不出了茫打?難道是這個(gè)方法有什么問(wèn)題?
遂查看官方文檔Resizing妖混,看完心中大呼: 法克~ 細(xì)節(jié)老赤,細(xì)節(jié), 細(xì)節(jié)

U0~EIQSZBP5ELOH$@`EVU%3.png

人家文檔說(shuō)的很清楚嘛制市,此方法 **只支持JPG, 只支持JPG, 只支持JPG, **抬旺,內(nèi)心
此時(shí)是崩潰的,心中想祥楣, 只支持JPG怎么夠用开财,現(xiàn)在png的,webp的各種格式的怎么辦...

往下順著看误褪, 好吧责鳍, 哈哈, 請(qǐng)?jiān)试S我竊喜兽间,是的历葛,官方提供了方法來(lái)支持更多格式:

(5LX_1O0V997KM$JL5R_ULR.png

** Tip: 此處記得,不是setDownsampleEnabled(true)就可以了嘀略,還得調(diào)用之前的Resize方法恤溶,人家文檔也說(shuō)的很明白了**

好吧, 也許即使如此屎鳍,有些人還不知如何設(shè)定這個(gè)屬性呢,其實(shí)很簡(jiǎn)單哇问裕,人家Configuration是可以定義的哇逮壁,** 初始化的時(shí)候進(jìn)行定義 **:

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

Fresco.initialize(this, config);

嗯, 是的粮宛, Fresco和其他圖片加載框架一樣窥淆,也是支持自定義一些Config屬性的,支持很多巍杈,什么DiskCacheConfig忧饭、ImagePipelineConfig、MemoryCacheParams等很多筷畦,自行看官方文檔進(jìn)行腦補(bǔ)吧~

好吧词裤,問(wèn)題是否解決了呢刺洒,本人運(yùn)行看了看,ok吼砂, 之前白屏的地方逆航,圖片出來(lái)了,滑動(dòng)看看呢渔肩, 還不錯(cuò)哦因俐。

** 更多 **

當(dāng)然,也還有很多使用上的問(wèn)題周偎,我會(huì)再使用的同時(shí)在此繼續(xù)更新一些抹剩,以使自己能溫故而知新。

另外蓉坎,我是喜歡做好人的澳眷, 如果你懶, 那么袍嬉,當(dāng)你出現(xiàn)問(wèn)題境蔼,有幾個(gè)地方你得去瞅瞅咯:

Fresco Issue 567 這里有一些PNG圖片展示的TooManyBitmapsException

Fresco Issue 84 可以參考看看評(píng)論中解決問(wèn)題的過(guò)程

Fresco Issue 738 不知道怎么設(shè)置緩存?可作參考

本人也單獨(dú)配置了一份很詳細(xì)的Config伺通, 大家也可以根據(jù)自己的需要進(jìn)行個(gè)性化配置箍土。

todo 2015/12/18

  此處占坑, 用來(lái)總結(jié)更多~~

結(jié)尾

很多時(shí)候罐监, 知道強(qiáng)大的東西還不夠吴藻,我們還都會(huì)用,會(huì)用還不夠弓柱,甚至還得去研習(xí)如何用的更精沟堡, 用精對(duì)于好多人依然不夠, 因?yàn)檫€要知道其原理矢空, 甚至學(xué)習(xí)和自己構(gòu)建航罗;

最后, 本人正在技術(shù)探索的路上屁药, 苦于平時(shí)工作壓力較大粥血, 時(shí)間相對(duì)較少, 難免寫(xiě)的過(guò)程了有疏漏酿箭, 甚至更多复亏,若恰好, 你看到了有問(wèn)題之處缭嫡, 或者有建議修改缔御, 那么, 請(qǐng)?zhí)岢鰜?lái)吧妇蛀, 幫助我進(jìn)步 耕突, 謝謝~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笤成,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子有勾,更是在濱河造成了極大的恐慌疹启,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔼卡,死亡現(xiàn)場(chǎng)離奇詭異喊崖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)雇逞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)荤懂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人塘砸,你說(shuō)我怎么就攤上這事节仿。” “怎么了掉蔬?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵廊宪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我女轿,道長(zhǎng)箭启,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任蛉迹,我火速辦了婚禮傅寡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘北救。我一直安慰自己荐操,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布珍策。 她就那樣靜靜地躺著托启,像睡著了一般。 火紅的嫁衣襯著肌膚如雪攘宙。 梳的紋絲不亂的頭發(fā)上屯耸,一...
    開(kāi)封第一講書(shū)人閱讀 52,549評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音模聋,去河邊找鬼肩民。 笑死唠亚,一個(gè)胖子當(dāng)著我的面吹牛链方,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播灶搜,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼祟蚀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼工窍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起前酿,我...
    開(kāi)封第一講書(shū)人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤患雏,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后罢维,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體淹仑,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年肺孵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匀借。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡平窘,死狀恐怖吓肋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瑰艘,我是刑警寧澤是鬼,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站紫新,受9級(jí)特大地震影響均蜜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弊琴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一兆龙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧敲董,春花似錦紫皇、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至萄窜,卻和暖如春铃剔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背查刻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工键兜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人穗泵。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓普气,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親佃延。 傳聞我的和親對(duì)象是個(gè)殘疾皇子现诀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,312評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)夷磕、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,123評(píng)論 4 61
  • 我熱愛(ài)這個(gè)世界,就像熱愛(ài)我的生命封锉,我打算帶走我的生命绵跷,但我不會(huì)帶走這個(gè)世界。我的下一次到來(lái)成福,一定是向陽(yáng)花開(kāi)抖坪,陽(yáng)光明...
    南呂依依閱讀 795評(píng)論 0 2
  • 問(wèn)問(wèn)自己,我想要什么闷叉?我想要愛(ài)〔晾現(xiàn)在有愛(ài)么?有家人握侧、同事蚯瞧、陌生人的愛(ài)。我幸福品擎、快樂(lè)么埋合?我感覺(jué)很孤獨(dú)。我有那么多的愛(ài)...
    周海雙閱讀 406評(píng)論 0 0
  • 一萄传、讀祈禱文甚颂、規(guī)畫(huà)、了凡能量誦秀菱、經(jīng)文 二振诬、行動(dòng): 1.聆聽(tīng):今天去了超學(xué)霸沙龍,聽(tīng)到學(xué)霸們的分享衍菱,孩子們很智慧,善...
    陽(yáng)光中的晨薇閱讀 204評(píng)論 0 0