http://stormzhang.com/opensource/2016/06/26/android-open-source-project-recommend1/

转载自:http://stormzhang.com/opensource/2016/06/26/android-open-source-project-recommend1/android

推荐他的全部博文~git

 

图片加载几乎是任何 Android 项目中必备的需求,而图片加载的开源库也愈来愈多,咱们姑且在 GitHub 上搜索下 android image 关键字,出来的前五个按照 Star 数排序的项目以下:github

图片描述

能够看到前四个是你们比较熟知的图片加载库,有 UniversalImageLoader、Picasso、Fresco、Glide,至于第五个 ion 实际上是一个网络库,只不过也提供了图片加载的功能,跟 Volley 相似,也提供图片加载的功能,可是若是图片加载是一个强需求的话,我更喜欢专一的库,因此本文只讨论单纯的图片加载库。缓存

我相信你们很纠结到底该选择哪个呢?貌似它们在GitHub上都有本身的一席之地,Star 数都蛮高的,确实很难抉择,那么今天我就来给你们分析下,图片加载到底该怎么选择!网络

1. UniversalImageLoader

https://github.com/nostra13/Android-Universal-Image-Loaderide

UIL能够算是老牌最火的图片加载库了,使用过这个开源库的项目能够说是多的使人发指,即便到如今 GitHub 上他的 Star 数仍然是众多图片加载库最多的。性能

惋惜的是该做者在项目中说明,从去年的9月份,他就已经中止了对该项目的维护。这就意味着之后任何的 bug 都不会修复,任何的新特性都不会再继续开发,因此毫无疑问 UIL 不推荐在项目中使用了。优化

2. Picasso

https://github.com/square/picassocode

Picasso 是 Square 公司的大做,名字起的也这么文艺,叫「毕加索」,意为加载图片就像画画同样,是一门艺术。这个库是我以前一直很喜欢的,由于他不只具有图片加载应有尽有的强大功能,他的调用也是如此简洁文艺:orm

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

以上代码就是给一个 ImageView 加载远程图片的一个示例,是否是很简洁?

固然不止如此,他还提供更多的用法,足以知足你实际项目中的各类需求,具体这些用法本文就不提了,能够去官网自行研究。

3. Glide

https://github.com/bumptech/glide

Glide 是 Google 一位员工的大做,他彻底是基于 Picasso 的,沿袭了 Picasso 的简洁风格,可是在此作了大量优化与改进。

Glide 默认的 Bitmap 格式是 RGB_565 格式,而 Picasso 默认的是 ARGB_8888 格式,这个内存开销要小一半。

在磁盘缓存方面,Picasso 只会缓存原始尺寸的图片,而 Glide 缓存的是多种规格,也就意味着 Glide 会根据你 ImageView 的大小来缓存相应大小的图片尺寸,好比你 ImageView 大小是200200,原图是 400400 ,而使用 Glide 就会缓存 200200 规格的图,而 Picasso 只会缓存 400400 规格的。这个改进就会致使 Glide 比 Picasso 加载的速度要快,毕竟少了每次裁剪从新渲染的过程。

最重要的一个特性是 Glide 支持加载 Gif 动态图,而 Picasso 不支持该特性。

除此以外,还有不少其余配置选项的增长。

整体来讲,Glide 是在 Picasso 基础之上进行的二次开发,各个方面作了很多改进,不过这也致使他的包比 Picasso 大很多,不过也就不到 500k,Picasso 是100多k,方法数也比 Picasso 多很多,不过毕竟级别仍是蛮小的,影响不是很大。

4. Fresco

https://github.com/facebook/fresco

Fresco 是 Facebook 出品,他是新一代的图片加载库,咱们知道 Android 应用程序可用的内存有限,常常会由于图片加载致使 OOM,虽然咱们有各类手段去优化,尽可能减小出现 OOM 的可能性,可是永远无法避免,尤为某些低端手机 OOM 更是严重。而 Facebook 就另辟蹊径,既然无法在 Java 层处理,咱们就在更底层的 Native 堆作手脚。因而 Fresco 将图片放到一个特别的内存区域叫 Ashmem 区,就是属于 Native 堆,图片将再也不占用 App 的内存,Java 层对此无能为力,这里是属于 C++ 的地盘,因此能大大的减小 OOM。

因此此库很强大,不过用起来也比较复杂,包也比较大,貌似有二、3M,底层涉及到的 C++ 领域,想读源码也比较困难。

5. 总结

综合来看,毫无疑问 Glide 与 Picasso 之间优先推荐选择 Glide,尤为是若是你的项目想要支持 Gif 动态图,那更该选择 Glide 。

可是若是你的项目使用了 Square 公司的全家桶,如 Retrofit 或者 OkHttp ,那么搭配 Picasso 一块儿使用也不是不可,兼容性可能会更好些,占用体积也会少些。

对于通常的 App 使用 Fresco 未免有些大材小用了,大部分状况 Glide 都能知足你的需求了,可是若是你的 App 中大量使用图片,好比是相似 Instagram 一类的图片社交 App ,那么推荐使用 Fresco ,虽然稍复杂,可是仍是推荐使用 Fresco ,对提高你 App 的性能与体验有很多帮助,值得花时间去研究并应用到本身的 App 上来。

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息