ListView 和RecycleView的差异化
缓存原理
ListView和RecyclerView的缓存机制原理上讲大致相似,移出屏幕的itemView会被回收到缓存中,然后进入屏幕的ItemView,会先从缓存中获取。
层级不同
- ListView(两级缓存):ListView有mActiveViews和mScrapViews
- RecycleView是四级缓存:mAttachedScrap;mCachedViews,mViewCacheExtension(不直接使用,需用户定制),mRecyclerPool
缓存的内容不同
- ListView缓存的是View
- RecyclerView缓存的是RecyclerView.ViewHolder,即View + ViewHolder(避免每次createView时调用findViewById)+ flag(标识状态)
RecycleView支持局部刷新
二者之间的最大区别在于,数据源改变时的缓存处理逻辑,ListView是将所有的 mActiveViews都移动到了mScrapViews的回收缓存中;但RecyclerView是更加灵活的对每个View修改标志位,区分是否重新bindView