Android图片加载框架分析之Glide、Picasso和Fresco

转载请标明出处:http://blog.csdn.net/collorye/article/details/53507396

由于手机APP不断地增多,使得APP的流畅度和缓存功能越来越受到重视。APP与用户的交互主要是在文字、图片和视频居多。那么图片的显示和加载尤为重要,好的图片显示和加载可以更好地留住用户。现在来分析一下当下流行的APP开发中的图片加载的方式。
主要图片加载方式:Glide、Picasso、Fresco
主要分析的功能点:优缺点、具体使用、库的大小

Glide

一.优点
1.可以加载gif图片(一个比较有特色的地方)

2.加载速度快、流畅度高

3.与Picasso相比,with()方法参数上下文显示更多

4.可以使用Picasso大部分功能
二.库的大小

Glide3.7.0:464KB

三.具体使用
1.导入依赖库
dependencies {
    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.android.support:support-v4:19.1.0'
}
2.简单使用
ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
Glide.with(this).load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg").into(imageView);
3.更强大的使用
(1).with()方法
a.with(Context context)
b.with(Activity activity)
c.with(FragmentActivity activity)
d.with(android.app.Fragment fragment)
e.with(Fragment fragment)
(2).diskCacheStrategy()
可以设置缓存图片的尺寸
4.封装工具类
github地址:https://github.com/tpnet/GlideUtils
四.github网站
https://github.com/bumptech/glide

Picasso

一.优点
1.变换图像可以更好地适应布局,并且减少内存大小
2.错误情况下加载错误图片
3.文件自由和R文件都可以加载
4.有统计和监控的功能
5.并发数可以随网络状态改变
6.可以优先级加载
二.库的大小
Picasso2.5.2:118KB
地址:http://square.github.io/picasso/
三.具体使用
1.导入依赖库
dependencies {
   compile 'com.squareup.picasso:picasso:2.5.2'
}
2.简单使用
ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
3.更强大的使用

(1).图片转换

Picasso.with(context)
      .load(url)
      .resize(50, 50)
      .centerCrop()
      .into(imageView);

(2).加载发生错误的时,加载一张图片作为提示

Picasso.with(context)
      .load(url)
      .placeholder(R.drawable.user_placeholder)
      .error(R.drawable.user_placeholder_error)
      .into(imageView);

(3).R文件和文件的加载

Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
Picasso.with(context).load(new File(...)).into(imageView2);

四.github网站

https://github.com/square/picasso

Fresco

一.优点
1.内存管理,三级缓存设计
2.图片预览,渐进式显示效果和多图请求
3.图片呈现效果,支持Gif、WebP格式
4.第一次加载和加载缓存速度都比较快
二.库的大小
3.5M左右
三.具体使用
1.导入依赖库
 dependencies {
 // 在 API < 14 上的机器支持 WebP 时,需要添加
 compile 'com.facebook.fresco:animated-base-support:0.12.0'

 // 支持 GIF 动图,需要添加
 compile 'com.facebook.fresco:animated-gif:0.12.0'

  // 支持 WebP (静态图+动图),需要添加
 compile 'com.facebook.fresco:animated-webp:0.12.0'
 compile 'com.facebook.fresco:webpsupport:0.12.0'

 // 仅支持 WebP 静态图,需要添加
 compile 'com.facebook.fresco:webpsupport:0.12.0'
 }
2.简单使用

(1).Application内添加
[MyApplication.java]

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

(2).在布局文件中添加

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

(3).添加SimpleDraweeView

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="130dp"
    android:layout_height="130dp"
    fresco:placeholderImage="@drawable/my_drawable"/>

(4).加载图片

Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/logo.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);
3.更强大的使用

(1).加载各种数据
Android图片加载框架分析之Glide、Picasso和Fresco_第1张图片
(2).其他功能支持
Android图片加载框架分析之Glide、Picasso和Fresco_第2张图片

4.封装工具类
https://github.com/CarGuo/FrescoUtils
四.github网站
https://github.com/facebook/fresco

总结:

根据大小分析:

Picasso < Glide < Fresco,如果你不使用特别复杂的功能的的情况下,使用Picasso完全是没有问题的。

根据功能分析:

Frscco > Glide > Picasso,如果项目中图片较多,功能比较复杂,可以使用Fresco。

根据方法数量分析:

Frscco > Glide > Picasso,因为Android中有64K限制,所以正常情况下没必要使用方法数量较多的。

根据流畅度分析:

Glide ≈ Fresco > Picasso,由于流畅度是一项很重要的指标,可以选择流畅度高的。

综合分析,正常情况下,使用Glide会比较好。

你可能感兴趣的:(Android)