动态页那条修了第二遍 —— alpha.2 的判据被「键抖动」绕过去了(P11-253,同一个 bug 的第二次尝试)。
变更
- alpha.2 为什么没修好:alpha.2 的判据是「这次组合里是不是第一次跑」,首次就不刷新。真机
(logs_live_20261012_230948,3.1.1-alpha.2)实测:每次从播放器返回照样在 0.2~0.5 秒后重拉首屏
(23:07:53.241 返回 → 53.967 首屏落地 → 56.187 YouTube 首屏完成),列表 75→21 后 56.205 焦点掉侧栏、
56.333 被兜底夹到最后一张卡。原因:这个 effect 的键里含「已配置频道列表」,而那份列表来自
DataStore —— 刚组合时先给一个空表、随后才发出真实表 ⇒ 同一次组合里必定多跑一遍;那一遍
已经不算「首次」,于是又刷新了。(debug 包不复现:那里没配频道、列表恒空,没有这次重跑。) - alpha.3 的判据(与键抖动解耦):只有用户真的切了子 tab 才刷新(子 tab 只有 tab 行的确认键会改)。
从播放器返回、从别的页面进来、频道表首帧 / 头像回填 / 登录态变化 —— 一律沿用已有列表,不重拉。
另留一行判据日志,每次决策都记下来,后续判读直接看它:
feed first-page decision: tab=… tabSwitched=… autoRefresh=… switchOn=… channels=N loggedIn=… - 刷新的正路不变:侧栏重点击「动态」(手动刷新)、切子 tab(开着「切换时自动刷新」时)、
以及频道首次就绪时补拉 YouTube。
待验证(真机)
- 从动态页点卡看视频 → 返回:日志
video exit与restore success之间不得再出现BiliDynamicFeed;
返回后不得再出现feed first-page decision … autoRefresh=true;焦点回原来那张卡,列表长度(videos=)不缩水。 - 前提:release 包(
com.kirin.mt)+「切换时自动确认」「切换时自动刷新」都开着(debug 包默认设置复现不了)。
已知
- alpha.2 的发布说明里「返回不再重载」那段结论已被本次推翻,以本节为准。
- 本轮仍只治「不该发生的重载」这一条。若将来有别的路径在用户翻页途中替换整表(例如关注流增量合并
重排),深处的焦点仍可能被夹到就近的卡片。