- 本文由stormzhang 张哥微信公众号总结而来,更多干货请添加(googledev)
- 在github上搜索AndroidImage
- 星数有多到少依次是:
- universal-image-loader
- Picasso
- freso
- glide
- ion == volley 有图片加载的功能
- 星数有多到少依次是:
- 单独讨论图片加载库!(强需求使用)
- universalImageLoader:地址:[https://github.com/nostra13/Android-Universal-Image-Loader]
- 是github上星数最多的,最火的图片加载库;但是该作者在去年9月份宣布停止对该项目的维护了,也就是说以后如果有bug了也不会修复了…在以后的项目实际操作中也就尽量不使用
- Picasso:地址:https://github.com/square/picasso
- Picasso是Square公司的大作,叫做 毕加索。具备了图片加载的强大的功能,调用也比较简洁
- Picasso.with(Context).load(“http://xxxx.xxx.png”).into(imageView);
- 这就是直接给imageView加载了远程图片的示例,还有别的更多种的用法,可以去官网查看,也可以去搜索大神们讲解的Picasso文章。
- universalImageLoader:地址:[https://github.com/nostra13/Android-Universal-Image-Loader]
Glide:地址:https://github.com/bumptech/glide
- 这是Google一位员工的大作,是基于Picasso的,在此基础上做了大量优化和改进
- glide默认的Bitmap格式是RGB_565格式,而Picasso默认的是ARGB_8888格式的, RGB_565格式的内存开销要小一半。
- 子啊磁盘缓存方面,Picasso只会缓存原始尺寸的图片,而Glide缓存的是多种规格的,比如imageview的大小是200*200,原图的400*400;Glide就会缓存200*200的图片,Picasso只会缓存400*400的图片。这样Glide加载的速度就会快,少了每次裁剪后重新渲染的过程!
- Glide还有一个特性的支持加载gif动态图的,Picasso不支持
- 还有一些其他的特性。
Fresco :地址https://github.com/facebook/fresco
- 该库是Facebook出品的,因为图加载会导致OOM(out of memory内存溢出),无论怎样优化都有可能出现OOM,低端手机更严重。
- 所以Facebook在更底层的Native堆中有一个内存区叫Ashmen区,图片在这里不会占用app内存,属于C++的地盘,java对此没有办法处理
- 不过该库用起来比较麻烦,源码设计C++领域,想读源码……
总结
- 所以在做项目的时候根据自己的需求进行选择,在Glide和Picasso之间选择,若果项目需要gif图就选择Glide;
- 如果项目中使用了Square公司的Retrofit OkHttp,那么使用Picasso更加兼容,体积占用也少;
- 如果自己的项目使用图片比较多,图片社交的App,就推荐使用Fresco,有利于提升性能和体验,需要去研究Fresco并应用到自己的App上
- -