字节跳动中级Android面经:RecyclerView源码级分析、事件分发那些坑

📅 2026/7/26 7:23:38 👁️ 阅读次数 📝 编程学习
字节跳动中级Android面经:RecyclerView源码级分析、事件分发那些坑

上一篇初级岗面经发出去之后,好几个读者私信说"初级那些我都会,但面中级岗就是过不了"。其实差距没你想的大——初级考"你知道什么",中级考"你理解到什么程度"。同样问RecyclerView,初级问四级缓存,中级让你讲Recycler源码调用链。

今天这6道题每道都是面试被追问到哑口无言的真实场景,答案全部经过源码验证。

Q1:RecyclerView滑出再滑回来,数据怎么复用的?讲源码级流程

光说"四级缓存"不够,字节面试官要你讲代码调用链。

item滑出屏幕时,LayoutManager调detachAndScrapAttachedViews把ViewHolder分出去。position有效的进CachedViews(容量2),失效的进RecycledViewPool。

滑回来需要新item时,调tryGetViewHolderForPositionByDeadline,按顺序查:ChangedScrap → AttachedScrap → CachedViews(position精确匹配不用rebind) → ViewCacheExtension → RecycledViewPool(按viewType取,要rebind)。五级缓存都没命中才走onCreateViewHolder + onBindViewHolder。

追问:setHasStableIds(true)有什么用?开启后根据id而不是position匹配,数据刷新时复用更精确,动画也更流畅。代价是每次都要保证id唯一。

Q2:ViewPager2+Fragment懒加载怎么实现?

ViewPager时代靠setUserVisibleH