美文网首页
Android知识点归纳---图片

Android知识点归纳---图片

作者: 风一样的code | 来源:发表于2020-11-09 11:38 被阅读0次

    知识点归纳:

    图片

    1. 图片库对比
      目前比较通用的图片库是Glide和Picasso
      库的大小和方法
      对比二者的jar包,Glide要比 Picasso大
      Picasso大概八百多的方法,Glide大概2000多个方法
    使用的方式
    Picasso.png
    Glide.png
    缓存:

    Picasso是下载完整的图片缓存到本地,比如图片的大小是720,如果我需要同一张图片大小也是720,那么就会直接返回,如果我需要改变这个图片的大小做展示就需要resize
    Glide是先下载图片然后改变图片的大小,以适应ImageView 的大小,之后再做缓存,如果下载同一个图片,但是要在两个大小不一样的ImageView 上做展示,那么就会缓存两份
    换个角度来看,这里不仅仅是缓存的问题,比如一个 ImageView 要改变它的大小,Piicasso 就只需要下载一次 full size 的图片,但是 Glide 实际上就不仅仅是下载一次了,它需要去单独下载然后改变大小适配 imageView,因为对于 Glide 来讲,需要缓存不同大小的同一张图片。

    这样的设计有问题么?继续往下看

    Glide使用的内存相比Picasso要小(格式相同的图片)

    加载图片的时间:

    直接下载的话,Picasso相比Glide要快一些,因为Glide要改变图片的大小
    缓存中加载的话,Glide要快一些,Picasso要进行resize

    others:

    Glide支持gif
    Glide更加灵活(好像加载的回调比较全面些)

    Memory:

    Glide 是会先下载图片,然后改变图片的大小,以适应 imageView 的要求,然后缓存到本地,同一个图片,如果应用到大小不同的ImageView上,则会缓存两份。存在即是合理,这样的设计当然有它自己的好处。

    内存使用

    Glide默认使用的是RGB_555,Picasso默认使用的是RGB_8888,这里可以进行修改Glide的默认加载方式,新建一个类继承GlideModule

    <meta-data android:name="example.com.myanimation.GlideConfiguration" android:value="GlideModule"/>
    
    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.
        }
    }
    

    之后观察两者加载的对比:

    Memory.png

    这里可以看出Glide加载使用的内存是8M,Picasso使用的是13,这里就体现了之前说到的Glide加载图片的问题,Picasso是缓存整个图片的size,Glide则是改变图片大小之后缓存,这样就会节约内存,减少OutOfMemoryError 的可能性。

    没有十全十美的存在,图片加载各有千秋,根据实际的需求自己选择,比如你想要你的 app 小一些,没有那么多的额外功能,那么 Picasso 是你的首选。反之,比如你的应用中需要加载 GIF,或者对于内存的大小比较在意,那么 Glide 应该是不错的选择。

    个人而言,我还是比较倾向于Glide,毕竟人家支持GIF啊。

    相关文章

      网友评论

          本文标题:Android知识点归纳---图片

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