作者:爱雨浮龙
一、图片
1、图片库对比
2、LRUCache原理
3、图片加载原理
4、自己去实现图片库,怎么做?
5、Glide源码解析
6、Glide使用什么缓存?
7、Glide内存缓存如何控制大小?
参考答案:
1、图片库对比
Picasso Glide Fresco
Picasso 毕加索 Square
Picasso 没有实现本地缓存功能,交给了 Square 的另外一个网络库 okhttp 去实现,
这样的好处是可以通过请求 Response Header 中的 Cache-Control 及 Expired 控制图片的过期时间。
- 使用简单,代码简洁
- 与
Square
其他类库搭配兼容性好,Retrofit OkHttp
等
缺点:
- 功能简单 图片加载
- 性能(加载速度等等)较(
Glide
、Fresco
)差 - 自身没有实现"本地缓存"
Glide Google 开源
支持 Gif WebP Video
生命周期继承
高效缓存策略
- 支持
Memory
和Disk
缓存 Picasso
只会缓存原始尺寸图片,而Glide
缓存时多种规格- 内存开销小,默认
RGB_565
,Picasso
默认是ARGB_8888
缺点:
- 使用方法复杂,实现方法较多
- 使用比
Fresco
简单,但性能(加载&缓存)却比不上Fresco
Fresco Facebook
- 大大减少
OOM
,底层使用C++
技术解决图片缓存问题 - 使用加单,几乎全部功能都能在
xml
上定制
缺点:
- 用法变得更加复杂
- 依赖包更大了
2~3M
- 底层
C++
,阅读源码困难
对比项 | Picasso | Glide | Fresco |
---|---|---|---|
地址 | github.com/square/pica… | github.com/bumptech/gl… | github.com/facebook/fr… |
发布时间 | 2013年5月 | 2014年9月 | 2015年5月 |
是否支持gif | false | true | true |
是否支持webP | true | true | true |
视频缩略图 | false | true | true |
大小 | 100k | 500 KB | 2~3M |
加载速度 | 中 | 高 | 高 |
Disk+Men Cache | true | true | true</ |