异步图片加载Fresco v/s Universal Image Loader (UIL)

在开发中我们经常会接触到图片的加载,图片加载是一个比较头疼的问题,你可以要考虑到图片的异步加载,图片的缓存处理、
图片的压缩处理等等,所以今天总结对比一下自己用过的2个开源图片框架,一个是大名鼎鼎的facebook出的fresco,
另外一个是使用人最多的Universal Image Loader (以下简称UIL),当然还有几款比较有名的图片框架,比如square的Picasso,鄙人没用过就不做比较了。

官方 Official

Fresco

官方文档

http://fresco-cn.org/

Github

https://github.com/facebook/fresco

Gradle

compile ‘com.facebook.fresco:fresco:0.6.0+’

UIL

Github

https://github.com/nostra13/Android-Universal-Image-Loader

Gradle

UIL没有上传在maven里面 所以得导jar包,可以在github上下载jar包

使用

Fresco

使用起来非常简单

1
Fresco.initialize(context);//初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!-- 在xml布局里使用 这里列举了很多可选项,可以根据需要来使用-->
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="20dp"
android:layout_height="20dp" 注意DraweeView不支持wrap_content
fresco:fadeDuration="300"
fresco:actualImageScaleType="focusCrop" 缩放形式
fresco:placeholderImage="@color/wait_color" 临时安放的图片
fresco:placeholderImageScaleType="fitCenter"
fresco:failureImage="@drawable/error" 加载失败的图片
fresco:failureImageScaleType="centerInside"
fresco:retryImage="@drawable/retrying" 重试的图片
fresco:retryImageScaleType="centerCrop"
fresco:progressBarImage="@drawable/progress_bar" 加载进度时候的图片
fresco:progressBarImageScaleType="centerInside"
fresco:progressBarAutoRotateInterval="1000"
fresco:backgroundImage="@color/blue"
fresco:overlayImage="@drawable/watermark" 叠加的图片
fresco:pressedStateOverlayImage="@color/red" 按下去时候的图片
fresco:roundAsCircle="false" 图片是否是圆形
fresco:roundedCornerRadius="1dp" 图片圆角角度
fresco:roundTopLeft="true"
fresco:roundTopRight="false"
fresco:roundBottomLeft="false"
fresco:roundBottomRight="true"
fresco:roundWithOverlayColor="@color/corner_color"
fresco:roundingBorderWidth="2dp" 圆角边框宽度
fresco:roundingBorderColor="@color/border_color" 圆角边框颜色
/>

1
2
SimpleDraweeView draweeView = (SimpleDraweeView)findViewById(R.id.my_image_view);
draweeView.setImageURI(Uri.parse("http://www.baidu.com/1.jpg"));//搞定!

剩下的,Fresco会替你完成:

  • 显示占位图直到加载完成;
  • 下载图片;
  • 缓存图片;
  • 图片不再显示时,从内存中移除; etc

Fresco含有的特点是:

  • focusCrop缩放属性,可以支持人脸识别(让你的脸居中显示)
  • 默认的渐进式加载效果(这个超级棒)
  • 圆角/圆形图
  • 加载进度条
  • 支持Gif图片
  • 修改图片(比如下载完加一个logo在上面,比如微博的图片)

UIL

导入jar包
用起来也非常简单

1
2
3
ImageView imageView = (ImageView)findViewById(R.id.imageView);
ImageLoader.getInstance().displayImage("http://www.baidu.com/1.jpg", imageView);//搞定
//如果需要修改默认配置参数,可以设置option 具体参考文档

对比
首先我们来看一张图

这种图对比了时下流行的4种框架的异同,从表层来说,Fresco 自己定义了自己的View来配合加载,UIL则允许用户使用系统的View来加载

问题总结

  • Fresco 可能会于百度地图发生冲突
  • Fresco 在IDE布局预览的时候可能会有问题
  • UIL 的在处理圆角边框缩放可能需要自己写View

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2017 HACKGROUND All Rights Reserved.

UV : | PV :