摘要
根据教你写Android ImageLoader框架体验了一下设计模式以及开源库设计的基本原则。不过发布该博客博主也说,不建议使用该库去加载图片,根据实现的情况,我发现以下问题:
- 内存使用过大,容易OOM;
- 滑动过程中复用的View会先加载old url,再加载new url,造成闪动,体验不好;
- 其他一些空指针或者设计上的问题,例如加载图片的方式选择(我认为使用线程池更合理),以及DiskCache中存在的一些空指针问题等。
遇见问题就必须解决问题。原本也准备着手图片加载开源库的分析。
目前图片开源库比较出名有四种,分别是:
Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用。
Picasso 是 Square 开源的项目,且他的主导者是 JakeWharton,所以广为人知。
Glide 是 Google 员工的开源项目,被一些 Google App 使用,在去年的 Google I/O 上被推荐,不过目前国内资料不多。
Fresco 是 Facebook 在今年上半年开源的图片缓存,主要特点包括:
(1) 两个内存缓存加上 Native 缓存构成了三级缓存;
(2) 支持流式,可以类似网页上模糊渐进式显示图片;
(3) 对多帧动画图片支持更好,如 Gif、WebP。
内容选自开源选型之 Android 三大图片缓存原理、特性对比