美文网首页Android面试集锦
Glide,Picasso,Fresco比较

Glide,Picasso,Fresco比较

作者: shuixingge | 来源:发表于2016-08-26 18:28 被阅读1336次

    参考

    一:使用方法

    (1)Glide更易用,因为Glide的with方法不光接受Context,还接受Activity 和 Fragment,Context会自动的从它们获取。Picasso只接受Context。
    (2)同时将Activity/Fragment作为with()参数的好处是:图片加载会和Activity/Fragment的生命周期保持一致,比如 Paused状态在暂停加载,在Resumed的时候又自动重新加载。所以我建议传参的时候传递Activity 和 Fragment给Glide,而不是Context。

    context参数
    二:默认的bitmap格式

    Glide默认的Bitmap格式是RGB_565 ,Picasso默认的Bitmap格式的是ARGB_8888.
    Glide可以创建一个新的GlideModule将Bitmap格式转换到ARGB_8888

    public class GlideConfiguration implements GlideModule {
     
        @Override
        public void applyOptions(Context context, GlideBuilder builder) {
            // Apply options to the builder here.
            builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
        }
     
        @Override
        public void registerComponents(Context context, Glide glide) {
            // register ModelLoaders here.
        }
    }
    

    同时在AndroidManifest.xml中将GlideModule定义为meta-data

    
    
    <meta-data android:name="com.inthecheesefactory.lab.glidepicasso.GlideConfiguration"
                android:value="GlideModule"/>
    
    三:加载策略

    Picasso是加载了全尺寸的图片到内存,然后让GPU来实时重绘大小。而Glide加载的大小和ImageView的大小是一致的,因此更小。
    Picasso也可以指定加载的图片大小

    四:缓存策略

    1.Picasso和Glide在磁盘缓存策略上有很大的不同;Picasso缓存的是全尺寸的,而Glide缓存的是跟ImageView尺寸相同的。
    2.Picasso只缓存一个全尺寸的。Glide则不同,它会为每种大小的ImageView缓存 一次。尽管一张图片已经缓存了一次,但是假如你要在另外一个地方再次以不同尺寸显示,需要重新下载,调整成新尺寸的大小,然后将这个尺寸的也缓存起来。
    3.具体说来就是:假如在第一个页面有一个200x200的ImageView,在第二个页面有一个100x100的ImageView,这两个ImageView本来是要显示同一张图片,Glide却需要下载两次。
    4 可以改变这种行为,让Glide既缓存全尺寸又缓存其他尺寸:

    Glide.with(this)
         .load("http://nuuneoi.com/uploads/source/playstore/cover.jpg")
         .diskCacheStrategy(DiskCacheStrategy.ALL)
         .into(ivImgGlide);
    

    下次在任何ImageView中加载图片的时候,全尺寸的图片将从缓存中取出,重新调整大小,然后缓存。
    5 Glide的这种方式优点是加载显示非常快。而Picasso的方式则因为需要在显示之前重新调整大小而导致一些延迟,即便你添加了这段代码来让其立即显示:

    五:gif的显示

    Glide支持gif,Picasso不支持gif
    同时因为Glide和Activity/Fragment的生命周期是一致的,因此gif的动画也会自动的随着Activity/Fragment的状态暂停、重放。Glide 的缓存在gif这里也是一样,调整大小然后缓存。

    六:其他

    包的大小:
    Picasso (v2.5.1)的大小约118kb,而Glide (v3.5.2)的大小约430kb。
    方法数目:
    Picasso和Glide的方法个数分别是840和2678个。
    对于DEX文件65535个方法的限制来说,2678是一个相当大的数字了。建议在使用Glide的时候开启ProGuard。

    Fresco

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

    相关文章

      网友评论

        本文标题:Glide,Picasso,Fresco比较

        本文链接:https://www.haomeiwen.com/subject/fkezsttx.html