Glide原理

Glide原理:

Glide概念:Glide是Google在2014的IO大会发布一款图片处理框架,是目前android领域比较成熟的一款,也是Google官方推荐的图片处理框架,主要支持网络图片、二进制流、drawable资源、本地图片显示,还支持本地视频显示。

Glide使用:

第一步导依赖网络权限:

     dependencies { compile 'com.github.bumptech.glide:glide:3.7.0' }

添加网络权限:<uses-permission android:name="android.permission.INTERNET"/>

第二步简单使用方法:

Glide.with(this).load(图片来源)into(设置View);

Glide其他的一些属性:

1:占位图目的为在目的图片还未加载出来的时候,提前展示给用户的一张图片;

RequestOptions options = new RequestOptions() .placeholder(R.drawable.loading);

Glide.with(this) .load(url) .apply(options) .into(imageView);

2: 加载失败 放置占位符

RequestOptions options = new RequestOptions() .placeholder(R.drawable.ic_launcher_background) .error(R.drawable.error) .diskCacheStrategy(DiskCacheStrategy.NONE);

   Glide.with(this) .load(url) .apply(options) .into(imageView);

3: 加载指定格式的图片--指定为静止图片、

Glide.with(this)

.load(url)

 .asBitmap()//只加载静态图片,如果是gif图片则只加载第一帧。

.placeholder(R.drawable.loading)

.error(R.drawable.error)

.diskCacheStrategy(DiskCacheStrategy.NONE)

.into(imageView);

4:加载动态图片

Glide.with(this)

.load(url)

.asGif()//加载动态图片,若现有图片为非gif图片,则直接加载错误占位图。

.placeholder(R.drawable.loading)

.error(R.drawable.error)

.diskCacheStrategy(DiskCacheStrategy.NONE)

.into(imageView);

5:加载指定大小图片

Glide.with(this)

.load(url)

.placeholder(R.drawable.loading)

.error(R.drawable.error)

.diskCacheStrategy(DiskCacheStrategy.NONE)

.override(100, 100)//指定图片大小

.into(imageView);

其他的一些方法,后续会有所更新

Glide原理分析:

With:当上下文对象传入的是非全局context,如果glide运行在非UI线程,使用全局上下文,如果glide在UI线程加载图片,因为activity的生命周期和UI线程并不完全同步,所以glide无法准确得知寄存体的生命周期, 因此glide底层创建出一个不可见fragment,而fragment的生命周期和activity同步,所以当activity ondestory的时候,停止glide图片加载。 如果是全局上下文,那么glide加载图片跟随application的生命周期。

缓存:glide支持默认内存缓存,当然根据实际需求可以关闭内存缓存。本地缓存需要手动设置,

总共有四个缓存类型:

all:缓存资源和处理结果;

source:只缓存资源;(sao si)

result:只缓存处理结果图;

none:不进行本地缓存; 

  缓存采用lrucache算法,本地缓存支持的默认空间为250M,使用线程池处理本地缓存,线程池的核心数量等于获得可用的处理器个数。

Load:load方法根据传入类型不同,有多个重载,每个重载方法最后都会返回一个DrawableTypeRequest 对象,他的父类DrawableRequestBuilder是一个支持链式调用的类。 加载图片的流程:通过loadFromMemory从内存中读取,读取分为两级,先从loadFromActiveResources方法中读取,存储当前activity正在使用的资源。如果没有获取到,通过loadFromCache,从MemoryCache缓存中获取,该接口实现类为LruResourceCache。如果从loadFromMemory没有获取到缓存Resource,则从文件缓存或数据中读取。

Into:into是所有方法中最为复杂的,里边传入要显示图片的view,将处理后的图片设置到view上,因为涉及到UI的更新,所以底层会检查是否是主线程。

传入的view在glide底层被封装成了一个target对象,target能够获取自身绑定的请求,当发现之前的请求还在的时候,会把旧的请求清除掉,绑定新的请求,这也就是为什么控件复用时不会出现图片错位的问题。设置图片之前,首先会从memorycache中读取,如果没有从磁盘读取,当然读取resource还是result是有磁盘缓存的策略决定的,获取到对应的图片后将图片设置给imageview。

特殊形状图片设置:glide3设置图片形状通过transform方法里边传入自定义view,glide4新增了apply方法直接设置常用形状。

关于glide加载图片可能引发oom问题的处理: 自定义recyview,重写onViewRecycled方法,在方法内,将划出当前屏幕的item中,已经为空的imageview,调用glide的clear方法清除imageview中的资源。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 1. Glide 基本用法 接下来的讲解将基于 Glide 目前的最新版本 4.11。 Glide 的使用特...
    灯不利多阅读 6,959评论 0 3
  • 1.Glide是什么? Glide是Google在2014的IO大会发布一款图片处理框架,是目前android领域...
    无语_4c3f阅读 8,492评论 0 4
  • Glide分析 发展到现在Android的图片加载框架越来越成熟从一开始的UIL到后来的Glide、Picasso...
    Jesse_zhao阅读 11,314评论 1 8
  • Glide是一个优秀的图片加载库,它有如下优点: Glide可以监听Activity的生命周期管理,更加合理的管理...
    Ihesong阅读 8,702评论 1 5
  • 谈到Glide,从英文字面意思有滑行、滑动的意思;而Android从开发的角度我们知道它是一款图片加载框架,这里引...
    maoqitian阅读 4,685评论 0 9