Glide原理

1)
首先,Glide.with(activity)方法得到RequestManager类,这个类的主要作用是将glide 与 整个组件的生命周期绑定在一起。(它实现了LifecycleListener接口,这是一个与Context的生命周期绑定的接口,将request与生命周期绑定,这样就可以通过context的生命周期去操作网络请求的开始,暂停等。)

如何绑定的??答:在Activity上创建一个透明无界面的RequestManagerFragment加入到FragmentManger中,通过添加的Fragment来感知Activity、Fragment的生命周期。因为添加到Activity中的Fragment会跟随Activity的生命周期。

2)
通过load方法来初始化一些参数,这里传入的参数给后面的加载方式提供了依据;

3)
通过into这个核心方法将图片获取 并 通过一系列处理后加载到相应的控件上,这部分逻辑最为复杂,建立请求,然后通过Engine引擎类将请求进行统一的处理,里面开启了两个线程池-----------磁盘缓存线程池(diskcacheService)和 源线程池(sourceService),并且进行了两层缓存,除了我们常见的内存缓存外,还进行了活动资源的缓存,其中内部的网络请求是通过android原生的HttpUrlConnection完成的

Glide
Glide.with(this).load(url).into(imageView);
三步走:先with(),再load(),最后into()

with()方法
是Glide类中的一组静态方法,
with()方法的重载种类非常多,既可以传入Activity,也可以传入Fragment或者是Context。每一个with()方法重载的代码都非常简单,都是先调用RequestManagerRetriever的静态get()方法得到一个
RequestManagerRetriever对象,这个静态get()方法就是一个单例实现,
然后再调用RequestManagerRetriever的实例get()方法,去获取RequestManager对象。

load()方法
参数类型:String,File,byte[],URL,图片资源ID,Uri,我这里只看参数类型为String类型的,这些方法都会返回DrawableTypeRequest对象。

into()方法的作用:
①初始化各种参数,做好准备工作(网络请求、基于MVP的各种接口回调),②使用最原始的HTTPConnect网络连接,读取文件流,③根据文件判断是GIF动图还是Bitmap静态图片,④通过相关复杂逻辑将下载的图片资源取出来,赋值给ImageView控件。

Glide的核心思想:
对象池:
Glide原理的核心是为bitmap维护一个对象池。对象池的主要目的是通过减少大对象内存的分配以重用来提高性能。
生命周期绑定:
第一个with方法,这个其实就是一个工厂方法,虽然有许多重载的形式,其实都是要创建一个RequestManager对象。
创建一个透明的 RequestManagerFragment 加入到FragmentManager 之中
通过添加的这个 Fragment 感知 Activity 、Fragment 的生命周期。
图片的加载任务会与activity或者Fragment的生命周期绑定,当界面执行onStop的使用自动暂定,而当执行onStart的时候又会自动重新开启,同样的,动态Gif图的加载也是如此,以用来节省电量,同时Glide会对网络状态做监听,当网络状态发生改变时,会重启失败的任务,以减少任务因网络连接问题而失败的概率。

预览图的使用
为加快加载速度,提高体验,优先加载预览图
AbsListView内图片的预加载:

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值