• 8.4.3 Glide


    和Picasso有90%相似度,但却比Picasso省内存,有助于APP的优化!

    Glide 的使用介绍

    Android Glide Google 推荐加载图片框架(加载图片详解篇)

    1). 导入库

    dependencies { 
        compile 'com.github.bumptech.glide:glide:3.5.2' 
        compile 'com.android.support:support-v4:22.0.0' 
    }  // Glide需要依赖Support Library v4,别忘了。其实Support Library v4已经是应用程序的标配了。

    2). 基础加载

    Glide.with(context) .load("http://inthecheesefactory.com/uploads/source/glidepicasso/cover.jpg").into(ivImg); 

      Glide的with方法不光接受Context,还接受Activity 和 Fragment,Context会自动的从他们获取。

      同时将Activity/Fragment作为with()参数的好处是:图片加载会和Activity/Fragment的生命周期保持一致,比如Paused状态在暂停加载,在Resumed的时候又自动重新加载。所以我建议传参的时候传递Activity 和 Fragment给Glide,而不是Context。

      Glide默认的Bitmap格式是RGB_565 ,比ARGB_8888格式的内存开销要小一半。如果你对默认的RGB_565效果觉得难以接受,可以创建一个新的GlideModule将Bitmap格式转换到ARGB_8888:

    public class GlideConfiguration implements GlideModule {  
        @Override  
        public void applyOptions(Context context, GlideBuilder builder) {  
            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"/>

    3). Glid设计及优点

      整个库分为 RequestManager(请求管理器),Engine(数据获取引擎),Fetcher(数据获取器),MemoryCache(内存缓存)、DiskLRUCache,Transformation(图片处理),Encoder(本地缓存存储),Registry(图片类型及解析器配置),Target(目标) 等模块。

      Glide 收到加载及显示资源的任务,创建 Request 并将它交给RequestManager,Request 启动 Engine 去数据源获取资源(通过 Fetcher ),获取到后 Transformation 处理后交给 Target。

      ·Glide 依赖于 DiskLRUCache、GifDecoder 等开源库去完成本地缓存和 Gif 图片解码工作。

    Glide 优点

    (1) 图片缓存->媒体缓存

      Glide 不仅是一个图片缓存,它支持 Gif、WebP、缩略图。甚至是 Video,所以更该当做一个媒体缓存。

    (2) 支持优先级处理

    (3) Activity/Fragment 生命周期一致,支持 trimMemory

      Glide 对每个 context 都保持一个 RequestManager,通过 FragmentTransaction 保持与 Activity/Fragment 生命周期一致,并且有对应的 trimMemory 接口实现可供调用。

    (4) 支持 okhttpVolley

      Glide 默认通过 UrlConnection 获取数据,可以配合 okhttp 或是 Volley 使用。实际 ImageLoader、Picasso 也都支持 okhttp、Volley。

    (5) 内存友好

    ① Glide 的内存缓存有个 active 的设计

    从内存缓存中取数据时,不像一般的实现用 get,而是用 remove,再将这个缓存数据放到一个 value 为软引用的 activeResources map 中,并计数引用数,在图片加载完成后进行判断,如果引用计数为空则回收掉。

    ② 内存缓存更小图片:Glide 以 url、view_width、view_height、屏幕的分辨率等做为联合 key,将处理后的图片缓存在内存缓存中,而不是原始图片以节省大小

    ③ 与 Activity/Fragment 生命周期一致,支持 trimMemory

    ④ 图片默认使用默认 RGB_565 而不是 ARGB_888虽然清晰度差些,但图片更小,也可配置到 ARGB_888。

    其他:Glide 可以通过 signature 或不使用本地缓存支持 url 过期

  • 相关阅读:
    #leetcode刷题之路32-最长有效括号
    #leetcode刷题之路31-下一个排列
    数据结构第一节 递归
    数据结构 第一节
    java基础 抽象类与接口
    Spring1
    java基础3。定义类
    java基础2。基本数据类型
    java基础1。面向对象
    丑数
  • 原文地址:https://www.cnblogs.com/keyarchen/p/6063253.html
Copyright © 2020-2023  润新知