我正在寻找一个开源图像加载/缓存解决方案。
我期待:
我希望能够处理来自磁盘和网络的异步图像加载,但我不确定Google的排球是否从磁盘加载。
Volley是否允许从磁盘加载资源?
An example of what I would like to do is available with AQuery.
答案 0 :(得分:26)
如果您对更新/更不稳定的软件感到满意,我刚刚发布了一个名为Glide的开源库:https://github.com/bumptech/glide
它旨在让您有效地加载任何可以获得InputStream的图像。它包括一些基本的http /文件加载实现,但也允许您通过回调插入自己的或使用一些外部库(如Volley)。
它包括内存和磁盘缓存,以及新设备上的位图回收。您需要做的就是实现一个接口来获取数据模型的输入流(path / url / uri等),并将它与您想要的任何转换,占位符或动画一起传递给Glide单例。
很高兴与您或任何好奇的人交谈,我们在Bump广泛使用它与各种图书馆进行交流。
答案 1 :(得分:18)
我从http://blog.bignerdranch.com/3177-solving-the-android-image-loading-problem-volley-vs-picasso/收集了一些重要信息 (较旧的版本Picasso 2.0与凌空之间的比较)
Picasso完全专注于图像加载。结果,如果你有 图像加载过程中的怪癖
另一方面,Volley完全专注于处理个人, 小的HTTP请求。因此,如果您的HTTP请求处理有一些怪癖, 排球可能有一个钩子给你。另一方面,如果你有一个 你的图像处理怪癖,你唯一真正的钩子 ImageCache。这不是什么,但它也不是很多,但它有 更多其他优点,例如定义请求后,使用它们 从片段或活动中是无痛的。与平行不同 AsyncTasksPicasso只做了一件事,而Volley试图解决更多问题 一般问题。
Android根本无法处理高分辨率图像。我有一个小 迷恋Android中捕获OutOfMemoryError的模式 应用。这似乎是一种荒谬的战术,但是Volley是唯一的出路 与麻烦相比,可靠地处理一些图像场景 毕加索正确缩放和拟合大图像。毕加索没有 尊重ImageViews上的
scaleType
属性(不确定它是什么 修订于最新版本。测试例:我发现Volley在加载时捕获OutOfMemoryError 原始分辨率图像而不是缩略图版本, 相比毕加索版本不会爆炸(它捕获 OutOfMemoryError也是,但是毕加索无法加载任何图像 太大了。 Volley不仅没有爆发,而且Volley全部显示出来 这些大图片!!!。
根据Android黑客Koushik Dutta:
测试所有Android图片和http库
我一直在测试和评估一堆各种图像 加载和http请求库可用,因为其中有几个 在过去一周内被释放。
阵容:
- AndroidAsync + UrlImageViewHelper(koush)
- Volley(谷歌)
- okhttp + Picasso(Square)
所有支持缓存和有条件缓存的响应,保持活跃, 等
思想:
- Picasso拥有最好的图像API。我将为我未来/当前的东西窃取他们的currying API风格。毕加索也是 显然是最慢的。特别是3g对wifi。可能是由于 他们的自定义okhttp客户端。
- UrlImageViewHelper + AndroidAsync是最快的。和其他两个伟大的图书馆一起玩真的突出了这个 但是,图像API过时了。
- Volley很光滑;我真的很喜欢他们的可插拔后端传输,并可能最终放弃AndroidAsync。请求优先权
和取消管理很棒。更新这些不是真正的http库。只是图像加载器。但那里 在评论中要求进行比较...... Android-Universal-Image-Loader是最受欢迎的 目前。高度可定制。
AQuery;像jquery,但对于Android?我想这很好,如果你的话 进入那种事情。不要使用这个;它在UI上疯狂 线程什么的。在我的Nexus 4上加载一堆图像 listview让我觉得我又重新回到了我的HTC G1上。 主要口吃。
使用缓存进行测试明确:
冷是新鲜的app开始。使用http连接可以清除缓存 大概是活着的。
冷/热(以毫秒为单位,平均10次运行,每次运行清除数据):
- Picasso 12142/11892
- UrlImage 7378/4525
- Volley 8292/7520
- Android-Universal-Image-Loader 14484/11243
- AQuery 11341/9637(这个似乎锁定了UI线程......不要使用它)
这是测试代码库: https://github.com/koush/AndroidNetworkBench
结论:这些测试几乎没有定论。我刚用很多图像测试了并发网络访问。不可否认,还有更多 测试一个库而不是那个。我喜欢Volley在比赛中的表现 例如,活动生命周期。其他图书馆都没有这样做。
所以,无论你的船是什么漂浮的。我(Koush)想和Volley一起 毕加索的API。
答案 2 :(得分:4)
volley'Request类处理所有网络请求。我还没有从磁盘中找到任何类加载资源..
答案 3 :(得分:3)
开箱即用Volley不包含自己的磁盘缓存实现。如果您愿意,您需要使用DiskLruCache(或混合内存/磁盘缓存)并使其实现Volley ImageCache接口。
此博客文章总结了如何使用Volley实现基于磁盘的缓存来加载图像:http://blogs.captechconsulting.com/blog/raymond-robinson/google-io-2013-volley-image-cache-tutorial。
答案 4 :(得分:3)
只需使用Picasso
库:
Picasso.get()
.load("/images/oprah_bees.gif")
.resize(50, 50)
.centerCrop()
.into(imageView)
这样您就可以从file
加载特定的SD
,并且您也可以将imageView
传递到您可以设置此图片的位置。
答案 5 :(得分:0)
Volly也可用于在磁盘上加载文件。
使用:
networkImageView.setImageUrl(Uri.fromFile(newFile(filename)).toString(),mImageFetcher);