recycleview一行多个时,会全部缓存吗
发布网友
发布时间:2022-05-25 15:40
我来回答
共1个回答
热心网友
时间:2023-11-11 11:31
会。首先说下RecycleView的缓存结构,Recycleview有四级缓存,分别是mAttachedscrap(屏幕内),mCacheviews(屏幕外),mViewcacheextension(自定义缓存),mRecyclerpool(缓存池)mAttachedscrap(屏幕内)用于屏幕内itemview快速重用,不需要重新createview和bindview,mCacheviews(屏幕外)保存最近移出屏幕的Viewholder,包含数据和position信息,复用时必须是相同位置的Viewholder才能复用,应用场景在那些需要来回滑动的列表中,当往回滑动时,能直接复用Viewholder数据,不需要重新bindview。mViewcacheextension(自定义缓存),不直接使用,需要用户自定义实现,默认不实现。mRecyclerpool(缓存池),当cacheview满了后或者adapter被更换,将cacheview中移出的Viewholder放到Pool中,放之前会把Viewholder数据清除掉,所以复用时需要重新bindview。当recycleview一行多个时,recycleview的四级缓存机制支持全部缓存。
Recyclerview的缓存机制还是非常值得到家参考的,先来说一下Recyclerview关于缓存的方法,关于Recyclerview的缓存数据有两个级别,一个是detach,另一个就是remove,关于detach就是在Recyclerview滑动或者layout时为了记录屏幕内条目信息而设定的,他主要的缓存的数据就是getchildcount列表所持有的数据,至于remove就是为了缓存我们从数据列表所删除的数据,根据这个信息我们可从代码来分析。