show code block

2017年3月9日 星期四

third-party元件 ─ 網路下載圖片比較和簡易使用Fresco、Picasso 、Glide、ImageLoader

前言:

這幾天遇到OOM問題。
情況大概就是RecyclerView裡面跑大量的ImageView,導致崩潰。
RecyclerView我是寫在Fragment上面的,一開始我以為是因為Fragment沒有做好回收導致重複創建。

後來找到的問題,原來是網路下載圖片(ImageLoader)的方式緩存沒有做到釋放。
我更換了一下我讀取網路上圖片的的第三方,使用了Picasso發現問題就迎刃而解了!!

問了一下大家才發現如果對處理執行緒(Thread)不熟的話,不太推使用ImageLoader,它有一堆Leak的問題。
迷之聲:TMD緩存方式寫得天花亂墜的還不是一堆Leak


Android是比較推薦使用GlidePicasso



GlidePicasso
使用起來其實大同小異。
在這邊大致上介紹一下使用方式:


重點程式碼:
build.gradle(Module:app)

Picasso
免不了的import
compile 'com.squareup.picasso:picasso:2.5.2'

使用方式:
Picasso.with(context)
.load("http://i.imgur.com/DvpvklR.png")
.into(imageView);


Glide
免不了的import
compile 'com.github.bumptech.glide:glide:3.7.0'

使用方式:
Glide.with(context)
        .load(url)
        .into(imageView);


兩個第三方很像吧,是不是都簡單的不要不要的!


Fresco
Frescofacebook自己釋出的圖片下載第三方,你自己一定體驗過facebook它們寫的app雖然用到大量的圖片,但卻不會有卡頓、Crash掉的問題,你就知道Fresco有多麼的強大了!

推薦使用:
Glide > Picasso > Fresco > ImageLoader
當然這是比較主觀的推薦,也須依你當下的需求來使用。
如果圖片量不大,個人覺得Picasso是首選,因為他比較瘦。
當你的App內有大量的圖片需要處理,首選就會是Fresco


我擷取它人一段文章讓你參考:

Picasso所能實現的功能Glide都能做到,只是所需設置不同。兩者的區別是PicassoGlide體積小很多且圖像質量比Glide高,但Glide的速度比Picasso更快,Glide的長處是處理大型的圖片流,如gifvideo,如果要製作視頻類應用,Glide當為首選。
Fresco
可以說是綜合了之前圖片加載庫的優點,其在5.0以下的內存優化非常好,但它的不足是體積太大,按體積進行比較:Fresco>Glide>Picasso,所以Fresco在圖片較多的應用中更能凸顯其價值,如果應用沒有太多圖片需求,不推薦使用Fresco


文獻:



沒有留言:

張貼留言

協程(coroutine) - 協程為什麼要學它?

 Coroutine 協程 再強調一次 協程就是由kotlin官方所提供的線程api //Thread Thread { }.start() //Executor val execu...