您的位置:首页 > 其它

RecyclerView的二级缓存 View缓存的两种方式

2016-12-11 13:46 267 查看
RecyclerView
中,有两个缓存:
Scrap
Recycle
Scrap
中文就是废料的意思,
Recycle
对应是回收的意思。这两个缓存有什么作用呢?首先
Scrap
缓存是指里面缓存的
View
是接下来需要用到的,即里面的绑定的数据无需更改,可以直接拿来用的,是一个轻量级的缓存集合;而
Recycle
的缓存的
View
为里面的数据需要重新绑定,即需要通过
Adapte
r重新绑定数据。关于这两个缓存的使用场景,下一节详细介绍。

当我们去获取一个新的
View
时,
RecyclerView
首先去检查
Scrap
缓存是否有对应的
position
View
,如果有,则直接拿出来可以直接用,不用去重新绑定数据;如果没有,则从
Recycle
缓存中取,并且会回调
Adapter
onBindViewHolder
方法(当然了,如果
Recycle
缓存为空,还会调用
onCreateViewHolder
方法),最后再将绑定好新数据的View返回。

前面我们了解到,
RecyclerView
中有二级缓存,我们可以自己选择将
View
缓存到哪里。我们有两种选择的方式:
Detach
Remove
Detach
View
放在
Scrap
缓存中,
Remove
掉的
View
放在Recycle缓存中;那我们应该如何去选择呢?

在什么样的场景中使用
Detach
呢?主要是在我们的代码执行结束之前,我们需要反复去将
View
移除并且马上又要添加进去时,选择
Datach
方式,比如:当我们对View进行重新排序的时候,可以选择Detach,因为屏幕上显示的就是这些position对应的View,我们并不需要重新去绑定数据,这明显可以提高效率。使用
Detach
方式可以通过函数
detachAndScrapView()
实现。

而使用Remove的方式,是当View不在屏幕中有任何显示的时候,你需要将它Remove掉,以备后面循环利用。可以通过函数
removeAndRecycleView()
实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: