av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Android解決ListView加載圖片閃爍

最近負責帶領公司項目重構,重構的時候發(fā)現(xiàn)項目里面同時在使用兩個圖片加載框架,andriod-universal-image-loader和fresco,這兩個框架其實都挺好的,不過項目里面不能同時使用兩個框架。因為他們初始化和運行的時候都需要分配一定的內存,這樣會導致緩存圖片的內存變大,如果不知情分配過大,還有可能導致隱形的oom。

10年積累的網(wǎng)站設計、成都網(wǎng)站建設經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站設計后付款的網(wǎng)站建設流程,更有石家莊免費網(wǎng)站建設讓你可以放心的選擇與我們合作。

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

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

***一個老員工說,一個類似發(fā)朋友圈功能的地方,如果用戶選擇了多張圖片待發(fā)送,這個時候用戶又點擊刪除某張圖片,這個時候剩下的圖片列表就會出現(xiàn)閃爍問題,說用fresco解決不了,用imageloader就不會出現(xiàn)閃爍的問題。暈,總不能因為要解決一個問題引入一個700kb的第三方框架吧!

fresco是facebook出品,在穩(wěn)定性和調用簡易性方面還是值得信賴的。andriod-universal-image-loader比較大,并且好像很長時間也不怎么維護和更新了。***決定使用fresco框架。

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

回歸正題,導致刪除圖片閃躲的原因是什么呢?

刪除一張圖片后,需要對圖片列表進行刷新操作,這個時候需要重新從sdcard里面讀取圖片,這么問題就來了,因為現(xiàn)在的手機照相機像素都非常高,好多都是4000*2500的,你可以測試一下BitmapFactory.decodeFile()從sdcard加載一張這樣大小的圖片需要300多ms,如果加上旋轉變換,那么至少需要1500多ms。你想肯定會出現(xiàn)卡頓閃爍的問題了。

知道導致原因,那么如何解決?

  1. 必須對Bitmap做縮略圖處理。
  2. 對于已經(jīng)加載過的進行memory緩存處理。廢話不多說,直接上代碼吧!

***步:創(chuàng)建一個hashmap保存bitmap對象,千萬記得bitmap要用弱引用,防止加載過多導致oom。

弱引用保存對象

第二步:從map中直接取出bitmap,如果不為空就直接顯示,為空就從sdcard中加載。

判斷從sdcard還是從內存中

第三步:記得開啟開啟多線程加載,本地看似挺快,圖片多了也會anr,也會卡頓。用戶體驗不好。

多線程sdcard加載圖片

第四步:這里面有兩個比較關鍵的技術點。

1、加載bitmap的時候,對圖片進行壓縮。

壓縮圖片

2、對于三星手機拍照后圖片旋轉問題,如何對圖片進行旋轉處理。

獲取圖片旋轉角度

使用矩陣旋轉圖片

以上就是解決問題的所有代碼,總共加起來不到100行,問題都解決了,最主要用這不到100行代碼,替換了一個700kb左右的圖片加載框架,這個才是解決問題的***收益。

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

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

  • 所有復雜問題要簡單化,所有簡單問題還是要簡單化。

文章名稱:Android解決ListView加載圖片閃爍
分享路徑:http://uogjgqi.cn/article/cdpochc.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流