使用ViewPager2导致使用RecyclerView复杂页面
2020-11-17 本文已影响0人
不思进取的码农
记录一个bug事件
在做一个纵滑直播间的需求们,当时想到使用ViewPager2
更方便,更好一些.但是没想到埋下了一个坑.
当时另一个同事在做商品详情页改版的需求,本身两个需求是在不同分支上各自打包然后测试完成的
在最后合并代码的时候最最后回归测试的时候,商品详情页滑动卡顿,特别是在向上滑动的时候尤为明显!!
使用ViewPager2的版本
androidx.viewpager2:viewpager2:1.0.0
查找原因
本质上商品详情页和直播之间并无直接关系,找原因分了3
步
- 1.跑商品详情页单独的
分支
是否有问题 - 2.下载一个线上包查看有问题
- 3.当前两个都发现没问题,其实我们也是一头雾水,然后我们在合并分支里面使用的了
git
的功能git bisect二分查找
看到地是哪一步出现的错误
最后我们是引入了ViewPager2后开始有出现问题
问题分析
ViewPager2
怎么导致商品详情页卡顿呢,我想到的唯一可能是RecyclerView
因为两者都有用到RecyclerView
查看External LIbraries 下的引用包,我们发现的问题.

我们发现里面有两个版本的RecyclerView
但是实际我们项目中引用的RecyclerView
是:
androidx.recyclerview:recyclerview:1.0.0
并没有引用1.1.0
版本
最后我们发现是ViewPager2使用了RecyclerView
的1.1.0
版本,而gradle会默认使用引用的最新版本 然后这个版本导致了我们商品详情页卡顿
解决问题
因为目前没有发现为什么RecyclerView
的1.1.0
的版本导致我们详情页,我们的处理方式是排除1.1.0 版本的RecyclerView
api (rootProject.ext.dependencies["viewpager2"]) {
exclude module: 'recyclerview'
}
当前的遗憾
我们并没有找到为什么使用RecyclerView
的1.1.0
版本会导致我们商品详情页卡顿,而我们在不使用RecyclerView
的1.1.0
后,ViewPager2的预加载好像也失去了效果.如果有这方面研究的留言,我们当时的问题只在商品详情页特别是加载大图的holder下非常明显