android解決ListView加載圖片閃爍

最近負(fù)責(zé)帶領(lǐng)公司項(xiàng)目重構(gòu)太援,重構(gòu)的時(shí)候發(fā)現(xiàn)項(xiàng)目里面同時(shí)在使用兩個(gè)圖片加載框架全跨,andriod-universal-image-loader和fresco,這兩個(gè)框架其實(shí)都挺好的惶室,不過項(xiàng)目里面不能同時(shí)使用兩個(gè)框架神年。因?yàn)樗麄兂跏蓟瓦\(yùn)行的時(shí)候都需要分配一定的內(nèi)存,這樣會(huì)導(dǎo)致緩存圖片的內(nèi)存變大淆攻,如果不知情分配過大肮之,還有可能導(dǎo)致隱形的oom。

問了以前的老員工都說不知道具體原因卜录,說是歷史遺留問題。


出現(xiàn)閃爍的頁面


最后一個(gè)老員工說眶明,一個(gè)類似發(fā)朋友圈功能的地方艰毒,如果用戶選擇了多張圖片待發(fā)送,這個(gè)時(shí)候用戶又點(diǎn)擊刪除某張圖片搜囱,這個(gè)時(shí)候剩下的圖片列表就會(huì)出現(xiàn)閃爍問題丑瞧,說用fresco解決不了,用imageloader就不會(huì)出現(xiàn)閃爍的問題蜀肘。暈绊汹,總不能因?yàn)橐鉀Q一個(gè)問題引入一個(gè)700kb的第三方框架吧!

fresco是facebook出品扮宠,在穩(wěn)定性和調(diào)用簡易性方面還是值得信賴的西乖。andriod-universal-image-loader比較大,并且好像很長時(shí)間也不怎么維護(hù)和更新了坛增。最后決定使用fresco框架获雕。

使用fresco那么就面對(duì)自己解決加載圖片閃爍的問題,其實(shí)所有圖片框架原理都大同小異收捣,首先去memory里面加載届案,沒有找到就是去本地緩存sdcard里面查找加載,如果還沒有罢艾,那么沒辦法只能使用網(wǎng)絡(luò)從圖片服務(wù)器加載了楣颠。

回歸正題,導(dǎo)致刪除圖片閃躲的原因是什么呢咐蚯?

刪除一張圖片后童漩,需要對(duì)圖片列表進(jìn)行刷新操作,這個(gè)時(shí)候需要重新從sdcard里面讀取圖片仓蛆,這么問題就來了睁冬,因?yàn)楝F(xiàn)在的手機(jī)照相機(jī)像素都非常高,好多都是4000*2500的,你可以測試一下BitmapFactory.decodeFile()從sdcard加載一張這樣大小的圖片需要300多ms豆拨,如果加上旋轉(zhuǎn)變換直奋,那么至少需要1500多ms。你想肯定會(huì)出現(xiàn)卡頓閃爍的問題了施禾。

知道導(dǎo)致原因脚线,那么如何解決?

1弥搞、必須對(duì)Bitmap做縮略圖處理邮绿。

2、對(duì)于已經(jīng)加載過的進(jìn)行memory緩存處理攀例。

廢話不多說船逮,直接上代碼吧!


第一步:

創(chuàng)建一個(gè)hashmap保存bitmap對(duì)象粤铭,千萬記得bitmap要用弱引用挖胃,防止加載過多導(dǎo)致oom。

弱引用保存對(duì)象

第二步:

從map中直接取出bitmap梆惯,如果不為空就直接顯示酱鸭,為空就從sdcard中加載。

判斷從sdcard還是從內(nèi)存中

第三步:

記得開啟開啟多線程加載垛吗,本地看似挺快凹髓,圖片多了也會(huì)anr,也會(huì)卡頓怯屉。用戶體驗(yàn)不好蔚舀。

多線程sdcard加載圖片

第四步

這里面有兩個(gè)比較關(guān)鍵的技術(shù)點(diǎn)。

1锨络、加載bitmap的時(shí)候蝗敢,對(duì)圖片進(jìn)行壓縮。

壓縮圖片

2足删、對(duì)于三星手機(jī)拍照后圖片旋轉(zhuǎn)問題寿谴,如何對(duì)圖片進(jìn)行旋轉(zhuǎn)處理。


獲取圖片旋轉(zhuǎn)角度
使用矩陣旋轉(zhuǎn)圖片

以上就是解決問題的所有代碼失受,總共加起來不到100行讶泰,問題都解決了,最主要用這不到100行代碼拂到,替換了一個(gè)700kb左右的圖片加載框架痪署,這個(gè)才是解決問題的最大收益。

現(xiàn)在的程序員有一個(gè)通病就是都是喜歡拿來主義兄旬,啥都喜歡用第三方的狼犯,別人現(xiàn)成的余寥,導(dǎo)致現(xiàn)在好多公司的項(xiàng)目引入大量的第三方庫,有很多僅僅用了不到千分之一的功能悯森,你說何必呢宋舷?自己分析下,幾行代碼往往就可以解決了瓢姻。

最后送給所有的it朋友一句話祝蝠,希望引起你們的共勉。

所有復(fù)雜問題要簡單化幻碱,所有簡單問題還是要簡單化绎狭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市褥傍,隨后出現(xiàn)的幾起案子儡嘶,更是在濱河造成了極大的恐慌,老刑警劉巖恍风,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件社付,死亡現(xiàn)場離奇詭異,居然都是意外死亡邻耕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門燕鸽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兄世,“玉大人,你說我怎么就攤上這事啊研∮玻” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵党远,是天一觀的道長削解。 經(jīng)常有香客問我,道長沟娱,這世上最難降的妖魔是什么氛驮? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮济似,結(jié)果婚禮上矫废,老公的妹妹穿的比我還像新娘。我一直安慰自己砰蠢,他們只是感情好蓖扑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著台舱,像睡著了一般律杠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天柜去,我揣著相機(jī)與錄音灰嫉,去河邊找鬼。 笑死诡蜓,一個(gè)胖子當(dāng)著我的面吹牛熬甫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔓罚,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼椿肩,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了豺谈?” 一聲冷哼從身側(cè)響起郑象,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎茬末,沒想到半個(gè)月后厂榛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丽惭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年击奶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片责掏。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柜砾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出换衬,到底是詐尸還是另有隱情痰驱,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布瞳浦,位于F島的核電站担映,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏叫潦。R本人自食惡果不足惜蝇完,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矗蕊。 院中可真熱鬧四敞,春花似錦、人聲如沸拔妥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽没龙。三九已至铺厨,卻和暖如春缎玫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背解滓。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工赃磨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洼裤。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓邻辉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親腮鞍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子值骇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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