picasso和Glide结构设计
picasso
glide
picasso和Glide加载图片代码使用结构
- picasso
Picasso.with(context)
.load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
.into(ivImg);
- glide
Glide.with(context)
.load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg")
.into(ivImg);
虽说看上去都一样,但是Glide更易用,因为Glide的with方法不光接受Context,还接受Activity 和 Fragment。
Activity 和 Fragment作为参数的好处:图片加载会和Activity 和 Fragment的生命周期一致 。比如在pause状态时暂停加载,resumed时又重新加载。建议传参的时候传Activity 和 Fragment
picasso和Glide图片格式
- picasso默认的是ARGB_8888
- glide默认Bitmap格式是RGB_565
当然我们也可以创建一个新的GlideMoudle将bitmap格式转换成ARGB_8888
picasso和Glide各自亮点
Glide
1.图片缓存->媒体缓存
不仅是一个图片缓存,它支持 Gif、WebP、缩略图。甚至是 Video,所以更该当做一个媒体缓存。
2.支持优先级处理
3.与 Activity/Fragment 生命周期一致,支持 trimMemory
Glide 对每个 context 都保持一个 RequestManager,通过 FragmentTransaction 保持与 Activity/Fragment 生命周期一致,并且有对应的 trimMemory 接口实现可供调用。picasso
1.自带统计监控功能(支持图片缓存使用的监控,包括缓存命中率、已使用内存大小、节省的流量等)
2.支持优先级处理(每次任务调度前会选择优先级高的任务,比如 App 页面中 Banner 的优先级高于 Icon 时就很适用)
3.支持延迟到图片尺寸计算完成加载
4.支持飞行模式、并发线程数根据网络类型而变
5.“无”本地缓存 (无”本地缓存,不是说没有本地缓存,而是 Picasso 自己没有实现,交给了 Square 的另外一个网络库 okhttp 去实现,这样的好处是可以通过请求 Response Header 中的 Cache-Control 及 Expired 控制图片的过期时间。)
picasso和Glide内存需求区别
我更喜欢Glide,因为它远比Picasso快,虽然需要更大的空间来缓存。
picasso和Glide缓存区别
- Picasso和Glide在磁盘缓存策略上有很大的不同。Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的。
将ImageView调整成不同大小,但不管大小如何Picasso只缓存一个全尺寸的。Glide则不同,它会为每种大小的ImageView缓存一次。