Android Image loading - Volley vs Picasso

Pat*_*ick 17 android caching universal-image-loader android-volley

我正在寻找一个开源图像加载/缓存解决方案.

我期待:

谷歌的排球,

广场的毕加索

通用图像加载器

我希望能够处理来自磁盘和网络的异步图像加载,但是我不确定Google的排球是否从磁盘加载.

Volley是否允许从磁盘加载资源?

AQuery提供了我想要做的一个例子.

Sam*_*udd 26

如果您对更新/更不稳定的软件感到满意,我刚刚发布了一个名为Glide的开源库:https://github.com/bumptech/glide

它旨在让您有效地加载任何可以获得InputStream的图像.它包括一些基本的http /文件加载实现,但也允许您通过回调插入自己的或使用一些外部库(如Volley).

它包括内存和磁盘缓存,以及新设备上的位图回收.您需要做的就是实现一个接口来获取数据模型的输入流(path/url/uri等),并将它与您想要的任何转换,占位符或动画一起传递给Glide单例.

很高兴与您或任何好奇的人交谈,我们在Bump上广泛使用它来与各种库进行交互.


LOG*_*TAG 18

我从http://blog.bignerdranch.com/3177-solving-the-android-image-loading-problem-volley-vs-picasso/收集了一些重要信息 (旧版本Picasso 2.0与凌空之间的比较)

毕加索完全专注于图像加载.因此,如果您在图像加载过程中有怪癖

另一方面,Volley完全专注于处理单个小的HTTP请求.因此,如果您的HTTP请求处理有一些怪癖,Volley可能会为您提供一个钩子.另一方面,如果你的图像处理有一个怪癖,你唯一真正的钩子是ImageCache.这不是什么,但它也不是很多.但它还有更多的其他优点,例如一旦你定义了你的请求,在片段或活动中使用它们就是轻而易举的.与并行AsyncTasks不同

毕加索只做了一件事,而沃利试图解决一个更普遍的问题.

Android根本无法处理高分辨率图像.我对在Android应用程序中捕获OutOfMemoryError的模式有一点迷恋.这似乎是一种荒谬的策略,但与可卡因的缩放和正确拟合大图像相比,Volley是可靠处理某些图像场景的唯一方法.Picasso不尊重scaleType您的ImageViews上的属性(不确定它是否在最新版本中修复).

测试例:我发现Volley在加载原始分辨率图像而不是缩略图版本时捕获OutOfMemoryError,与Picasso版本相比没有爆炸(它也会捕获OutOfMemoryError),但是毕加索无法加载任何太大的图像.Volley不仅不会爆炸,而且Volley显示所有这些大型图像!

Android Hacker Koushik Dutta表示:

测试所有Android Image和http库

我一直在测试和基准测试各种图像加载和http请求库,因为其中一些是在过去一周内发布的.

排队:

  • AndroidAsync + UrlImageViewHelper(koush)
  • 排球(谷歌)
  • okhttp +毕加索(广场)

所有支持缓存和有条件缓存的响应,保持活动等.

思考:

  • 毕加索拥有最好的图像API.我将为我未来/当前的东西窃取他们的currying API风格.毕加索也是最慢的.特别是3g对wifi.可能是由于他们的自定义okhttp客户端.
  • UrlImageViewHelper + AndroidAsync是最快的.然而,与其他两个伟大的库一起玩,确实强调了图像API已经过时了.
  • 凌空很光滑; 我真的很喜欢他们的可插拔后端传输,并可能最终放弃AndroidAsync.请求优先级
    和取消管理很棒.

更新这些不是真正的http库.只是图像加载器.但是评论中要求进行比较...... Android-Universal-Image-Loader是目前最受欢迎的.高度可定制.

一个问题; 像jquery,但对于Android?我想这很好,如果你有这样的事情.不要使用这个; 它在UI线程或其他东西上扯淡.在列表视图中加载我的Nexus 4上的一堆图像,看起来我再次回到我的HTC G1上.主要口吃.

缓存测试清楚:

冷是新鲜的app开始.温暖是缓存清晰,http连接可能保持活着.

冷/暖(以毫秒为单位,平均10次运行,每次运行清除数据):

  • 毕加索12142/11892
  • UrlImage 7378/4525
  • 排球8292/7520
  • Android-Universal-Image-Loader 14484/11243
  • AQuery 11341/9637(这个似乎锁定了UI线程......不要使用它)

这是测试代码库:https: //github.com/koush/AndroidNetworkBench

结论:这些测试很难得出结论.我刚用很多图像测试了并发网络访问.不可否认,测试图书馆还有更多.我喜欢Volley如何在Activity生命周期中表现出色.其他图书馆都没有这样做.

所以,无论你的船是什么漂浮.我(Koush)希望Volley加上Picasso的API.


Cro*_*ong 4

volley'Request类处理所有网络请求。我还没有找到任何从磁盘加载资源的类..