关于RecyclerView的卡顿问题,对谷歌非常失望

泡在网上的日子 / 文 发表于2014-12-16 18:47 次阅读 RecyclerView

希望这篇文章不要误导大家,现在基本清楚了,貌似将android:targetSdkVersion="21"就可以解决卡顿问题。而且经过几个版本的迭代,现在的RecyclerView也已经很流畅了。

RecyclerView控件自发布以来受到很多开发者的关注,因为它比ListView灵活,和Listview的最大不同点就是RecyclerView是通过layoutManager来决定自己的布局,因此RecyclerView可以完成各种各样的界面,而不仅仅是ListView。

网上也有很多人实践了RecyclerView并发表了相关文章,如RecyclerView使用介绍 一文就有比较完善的介绍,但是我觉得这些对RecyclerView的实践,大部分都没有应用到实际项目中,仅仅是做个用于学习交流的演示demo,因此RecyclerView的有些问题被严重忽略了,最近在阅读国外一篇关于使用RecyclerView实现拖动排序的文章之后发现,使用RecyclerView实现的列表在滑动的时候有严重的卡顿问题

我们知道ListView如果不使用ViewHolder这种模型,如果item的布局稍微复杂点Listview的效果是非常不理想的,但是如果用ViewHolder优化下,ListView的流畅程度几乎可以和ios的UITableView媲美(参见ListView之BaseAdapter的基本使用以及ViewHolder模式 一文 )。按理说RecyclerView应该比ListView流畅才对,因为RecyclerView基本上是在控件的层面避免了ListView 创建过多子view和getView的时候频繁调用findViewById这两个问题。但是我今天运行发现RecyclerView虽然不至于说非常卡,已经说不上流畅了。

暂时没有找出RecyclerView卡顿的原因,但是从卡顿的表现上来看,貌似跟滚动的scrollbar 有关,在滑动RecyclerView的时候发现scrollbar并不知道当前滚动的具体位置,只有当一个item完全显示或者消失的时候scrollbar才会更新其位置,scrollbar在滚动过程中完全是跳着的,如果你把item的高度设置的很高,这个问题很容易看出来。

在stackoverflow搜RecyclerView smooth可以搜到几个关于这个问题的提问,貌似是说RecyclerView现在还不支持smooth scrollbars support。请注意RecyclerView并不是标准sdk中的控件,他只存在于support包中,即使是5.0的sdk,也没有RecyclerView控件,所以到目前为止RecyclerView还是个debug版本。但是ViewPager也从来没有被合并到sdk中,不是一直用的好好的么。

google居然允许如此重要的控件存在这种bug,实在是让人难以理解,难道要让人继续把android系统与卡出翔联系起来么。或者说这些问题继续留给开发者自己解决?虽说虚拟机给android带来了一定负担,不过造成android真正卡顿的原因恐怕还是应用层的问题。

另外虽然android l换成了art虚拟机,但是从实际使用来看,流畅度并没有任何提升,甚至不如4.4,我不怀疑art虚拟机的性能,怀疑的是跟RecyclerView一样,android5.0在应用层远远没有准备好。

对google这种不负责任的做法实在是太失望了!


收藏 赞 (31) 踩 (41)
上一篇:Android 自定义View之BounceProgressBar
这是csdn上的一篇博客,写的比较详细,特别是在不使用图片的基础上绘制心形的细节非常到位。以下是原文: 之前几天下载了很久没用了的桌面版酷狗来用用的时候,发现其中加载歌曲的等待进度条的效果不错(个人感觉),如下: 然后趁着这周末两天天气较冷,窝在
下一篇:Android Binder机制浅析
摘要 Binder是android中一个很重要且很复杂的概念,它在系统的整体运作中发挥着极其重要的作用,不过本文并不打算从深层次分析Binder机制,有两点原因:1是目前网上已经有2篇很好的文章了,2是对Binder机制进行深入底层乃至驱动的分析这一过程相当困难且相当