Glide和Picasso的比較
Glide 和 Picasso 可以說是目前 Android 上最流行的圖片載入庫了。大部分安卓應用開發人員都有使用過這兩個庫在他們的開發工作中。這兩個庫也都確實提供了大量圖片載入的功能,而且也都經過了很多應用的檢驗,是可靠可信的。表面看上去似乎兩者工作原理很相似,但是實際上是有著很大差別的,主要體現在下面幾個方面:
- 下載圖片的方式
- 圖片的快取機制
- 載入到記憶體的機制
本文主要會圍繞這幾個方面來深入研究和對比兩個庫的差異,從而給開發者們提供參考。 對比的版本是 Glide v3.7.0 和 Picasso v2.5.2 的版本。
匯入庫到專案中
Picasso 和 Glide 都在 Jcenter 上有建立庫,所以只需要簡單的在新增dependency 即可
Picasso
dependencies {
compile 'com.squareup.picasso:picasso:2.5.1'
}
Glide
dependencies {
compile 'com.github.bumptech.glide:glide:3.5.2'
}
相同
1.兩個庫也都支援快取圖片,都通過下載圖片後,快取到本地。
區別
1. with值
Picasso.with() ------->Context context
Gilde.with( )------> Context context Activity activity FragmentActivity activity Fragment fragment
2. 圖片質量
Picasso 預設ARGB-8888格式
Glide 預設的Bitmap格式為RGB-565
3. 載入GIT圖
Glide動畫會消耗太多的記憶體
4. 快取策略和載入速度
Picasso 下載圖片然後快取完整的大小到本地,
Glide Glide 是會先下載圖片,然後改變圖片的大小,以適應 imageView 的要求,然後快取到本地
快取策略
(將ImageView調整成不同的大小,不管大小如何Picasso值快取一個尺寸,Glide會為每個ImageView快取一次)
(Glide讓載入非常快 Picasso 因為需要在顯示之前調整大小而又延遲)
5. 載入圖片的時間
當嘗試載入一個圖片的時候,兩個庫都會採用先從快取中讀取,如果快取中沒有,再去下載的做法。
··········1.當載入因為Picasso 是直接把圖載入到記憶體中,而 Glide 則需要改變圖片大小再載入到記憶體中去。這個應該是會耗費一定的時間。
··········2.載入圖片從記憶體中的時候,Glide比Picasso快 原理是因為快取機制的區別,Picasso從快取中拿到圖片先去resize後設定給imageview 但是Glide不需要這樣6. 庫的大小和方法的數量
Glide是Picasso的3.5倍 Glide有2678個 Picasso有849個
7.使用方式
如果只是簡單的從一個 URL 中下載圖片,然後顯示到 imageView 中,那麼兩個庫的使用方式基本相似,也都非常的簡單。同時兩個庫也都支援動畫和大小的剪下,也可以設定載入時候的預設圖片等功能: Picasso:
Picasso.with(myFragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_spinner)
.into(myImageView);
Glide:
Glide.with(myFragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_spinner)
.crossFade()
.into(myImageView);
8.其他功能的對比
GIF 支援:Glide 支援 GIF。 對於載入 GIF 來說,Glide 只需要簡單使用 Glide.with(...).load(...)。 但是 Picasso 是不支援的,因此如果你的應用中是需要載入 GIF 的話,那就只能用 Glide 了。
靈活性:Glide 提供了非常多的配置,你可以非常靈活的根據你的需求來客製化,從而縮減 Glide 庫的大小等。
總結
正所謂人無完人,經過一番對比,Picasso 和 Glide 各有千秋,那麼到底我們應該用哪個庫呢?這個還是回到應用的需求來看,比如你想要你的 app 小一些,沒有那麼多的額外功能,那麼 Picasso 是你的首選。反之,比如你的應用中需要載入 GIF,或者對於記憶體的大小比較在意,那麼 Glide 應該是不錯的選擇。
1. Glide比Picasso載入速度快,但Glide比Picasso需要更大的空間來快取
2.Glide載入影象及磁碟快取的方式都優於Picasso,且Glide更有利於減少OitOfMemoryError的發生
3.GIF動畫是Glide的殺手鐗