四级缓存
Scrap
Cache
ViewCacheExtension
RecycledViewPool
Scrap对应ListView缓存中的ActiveView,即屏幕内的缓存数据:当列表数据发生变化时,屏幕内的数据可以直接拿来复用,无需进行数据绑定
Cache是刚刚移除屏幕的缓存数据,默认大小是2个;当容量充满时又有新的数据加入,会根据先入先出原则,把先进入Cache的缓存数据放到下一级缓存中,然后把新的数据添加进来;Cache里面携带了ViewHolder的所有数据信息,数据可以直接拿来复用。
注意:Cache里是根据position来寻找数据,这个position是根据第一个或者最后一个可见的item的position和用户操作行为(上拉、下拉)来计算的
ViewCacheExtension是留给开发者自定义缓存的,通过重写getViewForPositionAndType方法,根据type和position拿到viewHolder,慎用
RecycledViewPool默认大小是5个,与Cache不同的是,在Cache里移除的ViewHolder再存入RecyclerViewPool之前,ViewHolder的数据会被全部重置,相当于一个新的ViewHolder,RecyclerViewPool是根据itemType来获取数据的,如果没有重写getItemType方法,那么itemType就是默认的;因为viewHolder数据被重置了,所以RecyclerViewPool缓存的ViewHolder是全新的,从这里取出的数据是要重新走onBindViewHolder方法的
网友评论