在去年的時(shí)候,在我寫過一篇為什么圖片加載我首先Glide里面提到過關(guān)于Picasso的內(nèi)存問題導(dǎo)致我放棄了Picasso谆扎,在很長的一段時(shí)間里我不再使用Picasso挂捅,當(dāng)時(shí)還做過測試芹助,分析了UniversalImageLoader堂湖,Glide状土,F(xiàn)resco等框架,比較了前景(Glide支持動(dòng)態(tài)圖蒙谓,F(xiàn)resco功能非常強(qiáng)大)斥季,內(nèi)存管理,是否輕量級(jí)(fresco雖然強(qiáng)大,但是依賴太多了酣倾,方法數(shù)有5000多個(gè))舵揭,最終選擇使用Glide。
不得不承認(rèn)躁锡,glide和picasso用法上很像,glide加載圖片比較流暢映之,自帶漸變效果,生命周期管理上非常不錯(cuò)杠输,但是也存在一些比較奇葩的問題在GridView或者ListView的Adapter中使用Glide加載圖片,圖片被拉伸問題,另外還有另一個(gè)我百思不得其解的問題蠢甲,當(dāng)我跳轉(zhuǎn)其他的Activity,回來的時(shí)候鹦牛,內(nèi)存使用只升不降(偶爾會(huì)降一點(diǎn)點(diǎn)),當(dāng)圖片過多能岩,列表頁面滑動(dòng)太快的時(shí)候也存在oom(OutOfMemoryException)的風(fēng)險(xiǎn)寞宫,總體來說Glide也是非常優(yōu)秀的
既然Picasso那么占用內(nèi)存拉鹃,為什么我決定重新使用它?
Picasso相對Glide膏燕,方法數(shù)不足Glide的1/3(Picasso 2.5.2版本 849個(gè)方法,Glide 3.7.0版本有2879個(gè)方法坝辫,遇到過64k的同學(xué)會(huì)關(guān)注這個(gè)),Picasso不能加載動(dòng)態(tài)圖(通過第三方也可以實(shí)現(xiàn))近忙,如果能解決Picasso的內(nèi)存問題,使用Picasso相對Glide更輕量級(jí)些及舍,當(dāng)然會(huì)選擇Picasso
如何解決Picasso占用內(nèi)存問題?
在之前的測試中锯玛,Picasso加載小圖片的內(nèi)存占用和其他幾個(gè)圖片加載框架相比是不分上下的兼蜈,但是在加載大圖Picasso相對于其他幾個(gè)框架卻有著幾倍的差距拙友,在加載超過2M左右的圖片就可能完全不能顯示圖片的情況(不同的手機(jī)可能不同),是不是只要減少圖片的size就可以控制內(nèi)存的占用率了
Picasso.with( context )
.load(url)
.resize(screenWidth/2遗契,screenWidth/4*3)
.centerCrop()
.into(imageView);
果然,加上resize這個(gè)屬性加載大圖毫無壓力姊途,內(nèi)存也非常平穩(wěn)涉瘾,甚至在圖片非常多的時(shí)候捷兰,Picasso的內(nèi)存占用率比Glide都要小得多。
一點(diǎn)感悟
可能很多人已經(jīng)發(fā)現(xiàn)了Picasso也能夠如此優(yōu)化的處理內(nèi)存占用問題贡茅,說來也慚愧,Picasso也已經(jīng)用了一年多了顶考,居然只是看表面的用法,并沒有深層次的研究和解決問題驹沿,一度崇拜的Glide居然敗給了很長時(shí)間都瞧不起的Picasso,可能這話也有些絕對渊季,Glide還有哪些潛力尚待我們?nèi)グl(fā)現(xiàn)呢?
擴(kuò)展閱讀
- 使用Picasso加載圖片的內(nèi)存優(yōu)化實(shí)踐(更多關(guān)于Picasso內(nèi)存優(yōu)化方案却汉,超實(shí)用)
- GalleryFinal(Demo中有關(guān)于Picasso及Glide和其他圖片加載框架內(nèi)存優(yōu)化方案)