Android图片加载

摘要

根据教你写Android ImageLoader框架体验了一下设计模式以及开源库设计的基本原则。不过发布该博客博主也说,不建议使用该库去加载图片,根据实现的情况,我发现以下问题:

  1. 内存使用过大,容易OOM;
  2. 滑动过程中复用的View会先加载old url,再加载new url,造成闪动,体验不好;
  3. 其他一些空指针或者设计上的问题,例如加载图片的方式选择(我认为使用线程池更合理),以及DiskCache中存在的一些空指针问题等。

遇见问题就必须解决问题。原本也准备着手图片加载开源库的分析。

目前图片开源库比较出名有四种,分别是:

  1. Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用。

  2. Picasso 是 Square 开源的项目,且他的主导者是 JakeWharton,所以广为人知。

  3. Glide 是 Google 员工的开源项目,被一些 Google App 使用,在去年的 Google I/O 上被推荐,不过目前国内资料不多。

  4. Fresco 是 Facebook 在今年上半年开源的图片缓存,主要特点包括:
    (1) 两个内存缓存加上 Native 缓存构成了三级缓存;
    (2) 支持流式,可以类似网页上模糊渐进式显示图片;
    (3) 对多帧动画图片支持更好,如 Gif、WebP。

内容选自开源选型之 Android 三大图片缓存原理、特性对比

Picasso源码的分析

Glide源码分析

参考

  1. 开源选型之 Android 三大图片缓存原理、特性对比