美文网首页
Glide在recyclerView中同时开启线程问题

Glide在recyclerView中同时开启线程问题

作者: imkobedroid | 来源:发表于2018-10-11 11:02 被阅读0次

glide全局是一个单例的存在,利用with()方法根据传递的context与界面关联感知生命周期,如果在非主线程中执行glide操作,会传入一个application的context对象,感知的生命周期是整个程序的周期。
在主线程中,如果传入的是activity的context,由于glide感知到不到activity的生命周期会在当前的activity中生成一个隐藏的fragment来与当前界面进行生命周期的绑定。当然传入的是fragment的话,就不用新建这个隐藏的fragment.

问题:在recyclerview中,每个item有一个glide加载图片的问题,每次glide加载图片会异步利用线程池开启一个访问,但是当用户在滑动是,复用的item并没有加载上次异步的请求网络缓慢导致的图片混乱问题,怎么理解?

原因:Glide将加载请求和Target(ImageView)关联,开始某个ImageView的加载请求前会先将该ImageView关联的请求清除。此时在线程池中的关联的DecodeJob,正在进行的网络请求不会被中断,在等待队列里的也不会被直接从线程池移除,而是移除回调并设置取消标志位,让未开始的后续加载步骤的逻辑不会被执行。
当列表(ListView/RecyclerView)快速滚动时,同时执行的网络请求数量不会超过设备可用核心数,其余请求会放到队列中等待执行。虽然队列长度可能会一下增加到几十,但随着列表复用View,队列中的大部分请求都会被取消掉,之后执行时不会发起网络请求,并迅速让位于等待中的请求。也就是说,快速滚动过程的中间很多个列表项的请求都会被略过。这样的机制保证了不会过度消耗资源导致滑动卡顿与图片混乱问题

相关文章

  • Glide在recyclerView中同时开启线程问题

    glide全局是一个单例的存在,利用with()方法根据传递的context与界面关联感知生命周期,如果在非主线程...

  • Glide框架使用中遇到的问题

    关于Glide+RecyclerView图形错乱和闪烁 在RecyclerView中使用Glide加载图片,当图片...

  • Glide 集成库

    Glide 关于集成库Glide OkHttp3Glide VolleyGlide RecyclerView 一、...

  • Glide4与RecyclerView

    Glide4与RecyclerView 关于 RecyclerView 集成库使你在你的应用中能够使用 Recyc...

  • RecyclerView使用Glide或Fresco加载图片不显

    RecyclerView使用Glide或Fresco加载图片不显示问题解决 后台返回的JSON中发现,图片的路径中...

  • Glide源码解析

    问题 glide是如何进行缓存的? glide是如何多线程加载图片? glide如何进行内存管理? 为何要选择gl...

  • 多线程之多线程基本概念

    什么是多线程1个进程中可以开启多条线程,每条线程可以并行(同时)执行不同的任务进程 -> 车间,线程 ->车间工人...

  • 多线程

    多线程 多线程 一个进程里面可以开启多条线程,每条线程可以并行(同时)执行不同的任务比如同时开启三条线程分别下载三...

  • RecyclerView使用

    添加依赖 如果需要加载网络图片则需要添加Glide的模块依赖 在xml文件中添加RecyclerView的控件 也...

  • Android Glide 升级到4.9 gif播放闪烁问题修复

    先看下现象 在glide3.x升级到4.9发现 在recyclerview中播放单张gif图片 ,多张挨着滑动交替...

网友评论

      本文标题:Glide在recyclerView中同时开启线程问题

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