对于图片加载框架,想必大家用的最多的应该是glide吧。
那么除了glide好用之外还有什么其他的有点呢?
其实glide的核心思想就是生命周期管理和图片缓存。
使用:
class GlideTest : AppCompatActivity() {
private var URL:String = "www.xxxxx"
private var iv: ImageView? = null;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
iv = findViewById<ImageView>(R.id.iv)
}
override fun onStart() {
super.onStart()
}
fun UseGlide( context:Context) {
Glide.with(context).load(URL).into(iv!!)
}
}
生命周期with:
我们从with()方法出发,对于主线程的Glide我们通过创建一个空白Fragment监听Activity的生命周期,然后根据生命周期处理任务。
load方法:
load方法指是创建一个RequestBuilder,加载资源的
into方法:
into方法就是何如经过重重调用、回调,最好给我们的ImageView给展示图片。在Glide注册机中给我们判断了传入的资源是URL还是drawable还是其他,然后调用相关的类进行处理。
这其中还会使用队列集合,正在执行的队列和准备执行的队列;这设计思想怎么有点像OkHttp呢
图片缓存机制:
1、内存缓存
1)活动缓存
2)内存缓存LRU
1)和2)都是内存缓存,为什么还要这样设置呢?
假如我们的Activity正在显示图片,这时候往内存缓存中添加数据,正好队列中达到了最大值,需要清理数据,这个数据正在被我们的ImageView使用,这不就出问题了。所以多加了一级活动缓存防止这种情况发生。
2、磁盘缓存
3、网络或IO