RecyclerView 是谷歌官方出的一个用于大量数据展示的新控件,可以用来代替传统的 ListView,更加强大和灵活。 最近,自己负责的业务,也遇到这样的一个问题,关于是否要将 ListView 替换为 RecyclerView? 秉承着实事求是的作风,弄清楚 RecyclerView 是否有足够的吸引力替换掉 ListView,我从性能这一角度出发,研究 RecyclerView 和 ListView 二者的缓存机制,并得到了一些较有益的”结论”,待我慢慢道来。 同时也希望能通过本文,让大家快速了解 RecyclerView 与 ListView 在缓存机制上的一些区别,在使用上也更加得心应手吧。 PS:相关知识: ListView 与 RecyclerView 缓存机制原理大致相似,如下图所示: 过程中,离屏的 ItemView 即被回收至缓存,入屏的 ItemView 则会优先从缓存中获取,只是 ListView 与 RecyclerView 的实现细节有差异.(这只是缓存使用的其中一个场景,还有如刷新等) PPS:本文不贴出详细代码,结合源码食用更佳!
2.1 缓存机制对比
在一些场景下,如界面初始化,滑动等,ListView 和 RecyclerView 都能很好地工作,两者并没有很大的差异: 文章的开头便抛出了这样一个问题,微信 Android 客户端卡券模块,大部分 UI 都是以列表页的形式展示,实现方式为 ListView,是否有必要将其替换成 RecyclerView 呢? 答案是否定的,从性能上看,RecyclerView 并没有带来显著的提升,不需要频繁更新,暂不支持用动画,意味着 RecyclerView 优势也不太明显,没有太大的吸引力,ListView 已经能很好地满足业务需求。 数据源频繁更新的场景,如弹幕:Recyclerview 实现的弹幕(旧)等 RecyclerView 的优势会非常明显; 进一步来讲,结论是:
列表页展示界面,需要支持动画,或者频繁更新,局部刷新,建议使用 RecyclerView,更加强大完善,易扩展;其它情况 (如微信卡包列表页) 两者都 OK,但 ListView 在使用上会更加方便,快捷。
Ps:仅从一个角度做了对比,盲人摸象,有误跪求指正。