一、两者的缓存机制上的区别
先来说一样的地方,ListView与RecyclerView缓存机制原理大致一样,滑动的时候,离开屏幕的ItemView被回收到缓存,新的itemView加在优先获取的缓存中的,这是正常的两种类似的缓存机制。
而不同的地方在于,两者的缓存层级不同,ListView只有两层,RecycleView有四级缓存。
1. mActiveViews和mAttachedScrap功能相似,意义在于快速重用屏幕上可见的列表项ItemView,而不需要重新createView和bindView;
2. mScrapView和mCachedViews + mReyclerViewPool功能相似,意义在于缓存离开屏幕的ItemView,目的是让即将进入屏幕的ItemView重用;
3. RecyclerView的优势在于: a.mCacheViews的使用,可以做到屏幕外的列表项ItemView进入屏幕内时也无须bindView快速重用; b.mRecyclerPool可以供多个RecyclerView共同使用,在特定场景下,如viewpaper+多个列表页下有优势.客观来说,RecyclerView在特定场景下对ListView的缓存机制做了补强和完善。
同时,两者的缓存不同,RecycleView缓存在ViewHolder,可以看作是:View + ViewHolder(避免每次createView时调用findViewById) + flag(标识状态);而ListView缓存在View上,