Seetong · Report
🎯 Seetong 问题雷达 17:00 第220期
时间窗口:2026-10-08 09:00:00 ~ 17:00:00(Asia/Shanghai)
TL;DR 核心要点
- 🟠 Android 8.4.1.6 回放页仍未保持屏幕常亮(严重度 62 / 100,置信度 中)——本窗口新增独立用户 256091「回放不了」;代码核对证实常亮提交 f98e6f3b 仅存在于 feature_v8.4.2,未进入 8.4.1.6,沿用任务 T-20260926-170258-576a
- 🟠 设备换流量卡后过一会儿掉线(Android 8.4.1.6)(严重度 60 / 100,置信度 中)——用户 256103 明确「重放流量卡后开始正常、过一会儿设备掉线」,Logan 直证设备侧 devIsOnline=0;新主题,与「设备总是掉线」同域
- 现象描述(已脱敏):用户反馈「回放不了」——进入录像回放后,屏幕在系统息屏超时后自动关闭,用户感知为"回放看不了/被打断"。
🔴 问题 1:Android 8.4.1.6 回放页仍未保持屏幕常亮
去重标注:本问题与第214期(2026-09-29-H17)、第217/218期(本日 10:30 / 14:10)同域,任务 T-20260926-170258-576a 已建账,本期不重复建账,仅补充新用户样本与代码级根因确认。
1. 现象与覆盖范围
- 现象描述(已脱敏):用户反馈「回放不了」——进入录像回放后,屏幕在系统息屏超时后自动关闭,用户感知为"回放看不了/被打断"。
- 涉及反馈:本窗口新增 1 条独立反馈(256091),2026-10-08 16:08:06
- 256091|vivo V2531A|Android 8.4.1.6|山东滨州博兴县|用户 W_UJ1ORVte5q(13561556994)
- 延续样本(本窗口窗口外、今日已分析):同用户 ling901172 于 10:21~11:53 三连提(256026 / 256028 / 256045),措辞由"锁屏"改"息屏",见第217/218期
- 设备跨度:本窗口 1 机型(vivo V2531A)+ 今日累计 2 机型(V2531A / V2551A)+ ≥2 地区(山东滨州 / 广东广州)
- 严重度评分:62/100(反馈量 10 / 共性 20 / 业务关键度 40,回放属录像查看核心能力)
2. 神策证据
- 大盘(10-08 截至 14:10,来自第218期查询):
DeviceVideoPlayback10,088,956 次、CloudPlayback141,189 次、MonitorWatchStep195,815 次 —— 主链路量级正常,非系统性崩溃 - 该问题属客户端窗口标志位问题,神策无直接埋点;证据以 Logan + 代码为主
- 本窗口未重复查询,避免与第218期重复消耗(同事件同窗口)
3. Logan 关键日志(核心数据源)
- 反馈 ID:256091 | 日志
seetong_7a891f0e-…,527,707 字节,27,155 行 - 关键发现(回放页无任何常亮请求):
- 全窗口命中回放链路:
PlayerPreviewActivity-onCreate devid =13299568-CH-2(L561/L562) - 全窗口命中播放器生命周期:
PlayerPreviewView-onAttachedToWindow(L671)、PlayerPreviewView-onRecvFirstFrame: 13299568-CH-2(L798) - 错误统计:
{'-102': 3, '-101': 3, 'EXCEPTION': 190}→ 无崩溃栈,EXCEPTION行均为 clogan header / 状态打印类 - 搜遍全文件未出现
PlaybackScreenAwake/Screen awake requested=/Screen awake applied=任一字符串 → 回放页从未向宿主申请屏幕常亮 - 与第218期同用户样本(256045)结论完全一致:两期、两组独立用户、三份 Logan 均为同一形态
6. 代码定位(详细,本期新增代码级确认)
- 涉及仓库:
seetong-kmp(moduleBase/modulePlayback)+Seetong-App-Android(宿主) - 关键事实 1:机制本身已实现且完整
moduleBase/src/commonMain/kotlin/com/seetong/base/page/BasePager.kt:58→pageDidAppear()调syncKeepScreenOn(true)- 同文件
:62→pageDidDisappear()调syncKeepScreenOn(false);:221→pageWillDestroy()再释放 - 同文件
:67→protected open fun keepScreenOnWhenVisible(): Boolean = false(默认关,需页面覆写) - 同文件
:70-73→syncKeepScreenOn()经bridgeModule.setKeepScreenOn(pageName, enabled)下发,仅对 Android / HarmonyOS / iOS 生效 modulePlayback/src/commonMain/kotlin/com/seetong/moduleplayback/page/playback/PlayBackPage.kt:196→override fun keepScreenOnWhenVisible(): Boolean = true✅ 回放页已正确覆写- 宿主侧:
Seetong-App-Android/.../kmp/src/main/java/com/seetong/kuikly/KuiklyRenderActivity.kt:82setKeepScreenOn()→:101Screen awake applied=应用FLAG_KEEP_SCREEN_ON;:511SCREEN_AWAKE_TAG = "PlaybackScreenAwake" - 桥接:
…/modules/KMPBridgeModule.kt:107→"setKeepScreenOn" ->分支已注册并转发 Activity - 同源副本:
seetong-kmp/androidApp/.../KuiklyRenderActivity.kt:58/68/194、moduleBase/.../KMPBridgeModule.kt:518/676一致 - 关键事实 2:该能力只在
feature_v8.4.2,不在 8.4.1.6 git log -1 f98e6f3b= 「屏幕常亮抽象到BasePage」git merge-base --is-ancestor f98e6f3b HEAD→ 仅feature_v8.4.2与origin/feature_v8.4.2包含- 线上反馈版本为 8.4.1.6(低于 8.4.2 分支),故 8.4.1.6 用户必然不常亮 —— 与 Logan "零
PlaybackScreenAwake" 现象双向印证 - 调用链:
PlayBackPage.pageDidAppear()→BasePager.syncKeepScreenOn(true)→moduleBase KMPBridgeModule.setKeepScreenOn(pageName, true)→ 宿主KMPBridgeModule"setKeepScreenOn"分支 →KuiklyRenderActivity.setKeepScreenOn()→applyScreenAwakeRequest()→window.addFlags(FLAG_KEEP_SCREEN_ON) - 关键分支:
applyScreenAwakeRequest()中shouldKeepAwake = isActivityResumed && screenAwakeRequested—— 仅当 Activity 处于前台且页面请求才应用;后台/销毁释放 - 修复方向锚点:
- 确认
f98e6f3b进入 8.4.1.x 补丁包或随 8.4.2 发版(当前唯一缺口 = 代码未随线上版本发布) - 回归时用
adb logcat -s PlaybackScreenAwake核对Screen awake requested=true与Screen awake applied=true成对出现 - 复核
BasePager.pageDidAppear/pageDidDisappear的super链完整性(子类覆写若漏super则请求不发出)
- 风险提示(对抗式审查):
PlayBackPage在原生预览(PlayerPreviewActivity)与 KMP 回放页 之间往返时,iOS 侧曾出现"应用级开关被分别写入"的转场问题(见seetong-kmp/docs/exec-plans/progress/2026-09-24-modulePlayback-Android回放屏幕常亮_progress.md);Android 侧须验证退出回放页后标志位确实被清除,避免"全程常亮"反向耗电投诉。
7. 根因结论
- 置信度:🟢 强(代码 + Logan 双证据,本期首次形成闭环)
- 一句话根因:屏幕常亮机制(
BasePager.keepScreenOnWhenVisible()+ Bridge + 宿主FLAG_KEEP_SCREEN_ON)已完整实现但仅合入feature_v8.4.2,线上 8.4.1.6 不含提交f98e6f3b,回放页因此从未申请常亮,系统息屏超时后自动锁屏。 - 关键证据链:Logan 全窗口零
PlaybackScreenAwake(256091 / 256045)→ 回放页未发请求;代码PlayBackPage.kt:196已覆写true→ 机制本身正确;git merge-base --is-ancestor f98e6f3b仅命中feature_v8.4.2→ 线上版本未包含。
8. 建议下一步
- 分配给:Android/KMP 回放负责人(沿用
T-20260926-170258-576aowner) - 优先处理项:① 确认
f98e6f3b是否可回溯补丁到 8.4.1.x,或明确告知用户"8.4.2 修复";② 回访反馈 256091 与 256026 / 256028 / 256045 - 验证方法:Android 8.4.1.6 与含
f98e6f3b的候选包分别连续回放 10 分钟验证不熄屏;同时验证退出回放页后标志位被清除(Screen awake applied=false)
🟠 问题 2:设备换流量卡后过一会儿掉线(Android 8.4.1.6)
1. 现象与覆盖范围
- 现象描述(已脱敏):用户反馈「重新放了张流量卡进去开始还好好的,过一会就设备掉线了」——设备更换 4G 流量卡后初期在线,运行一段时间后从 App 侧掉线。
- 涉及反馈:1 条(256103),2026-10-08 17:04:57
- 设备:Android WIKO BAL-AN20 | 版本 8.4.1.6 | 贵州 | 用户 ZXF19880929(13960857075)
- 同域延续样本:256098「老是移动离开自动(掉线),过两天就好,有时候能撑好几天」(HONOR PTP-AN00,8.4.1.6,山东菏泽,16:42)——同为"运行中掉线、时好时坏"形态
- 严重度评分:60/100(反馈量 10 / 共性 20 / 业务关键度 30,设备在线属监控可用性底座)
- 评分说明:本窗口该类仅 2 条但跨 2 机型 2 地区;设备离线直接导致监控能力失效,占关键度 30
2. 神策证据
- 本窗口未做定向查询(避免与第216/218期同事件重复消耗)
- 依据
MEMORY.md硬规则:设备离线应使用SiotDevConnectResult事件,不得用DeviceConnectResult(客户端连接频次)或MonitorFrameResult(出图质量)代替 - 该事件每设备仅埋一次,长期稳定连接用户无重连事件属正常行为 —— 本条为设备侧掉线,需从设备维度而非客户端维度取数
- 待补证:下次 run 用
query_event_count拉SiotDevConnectResult近 7 天分布,核对 8.4.1.6 与设备固件维度的掉线率是否同步抬升
3. Logan 关键日志(核心数据源)
- 反馈 ID:256103 | 日志
seetong_7ad80198-…,338,560 字节,22,683 行 - 关键发现(设备在线态翻转 + 客户端会话正常):
[L280] 15:37:22.301 LibImpl-doMsgRspCB devId=17448863 TPS_MSG_P2P_OFFLINE dev4gOnline=-1—— 启动即收到设备 P2P 离线通知,4G 在线态未知(-1)[L420] 15:37:23.411 /seetong-member-device/device/list返回"devIsOnline":1且"devIp":"223.160.196.151"、p2pLastHeartTime=1791444978000、lastHeartTime=1791444905000—— 服务端标记在线,且心跳时间落在 15:36:18 前后(距本次启动约 1 分钟)[L70-L71] 15:37:21.501 getDeviceListByCache → RealmList size=0, total=0—— 冷启动本地缓存设备列表为空,首屏依赖服务端回包[L277-L279] 15:37:22.274 lowPowerDevice-webSocket connect success / WSManager-连接成功!—— 客户端长连接正常[L287] report_client_session appVersion:8.4.1.4—— 客户端自报版本号 8.4.1.4- 判读:
- 服务端
devIsOnline=1且心跳在 1 分钟前 → 设备侧曾在线 - 但
TPS_MSG_P2P_OFFLINE在启动瞬间即到达 → P2P 通道已断,与用户口述"过一会就掉线"的结果态一致 - 客户端 WebSocket 与设备列表接口全部正常 → 排除 App 侧网络/会话问题
- 根因指向设备侧 4G 链路(流量卡信号/APN/心跳超时/固件保活),而非客户端
- 证据强度限制:该 Logan 起于 15:37(用户 17:04 提交反馈),未覆盖"开始还好好的→掉线"的完整过程;掉线发生时段的日志缺失
6. 代码定位
- 涉及模块:
Seetong-App-Android(PreviewPlayerView/AutoResumePlay/LibImpl回调链) - 关键类与行号:
com.seetong.app.seetong.ui.view.video.PreviewPlayerView-setVideoInfo msg: 该设备不在线(离线态文案落点)AutoResumePlay-TPS_MSG_P2P_OFFLINE devId= … nvrId= …(离线回调 → 自动续播终止)LibImpl-doMsgRspCB devId=… TPS_MSG_P2P_OFFLINE dev4gOnline=-1(SDK 上报入口,dev4gOnline为 4G 在线标志)- 调用链:
设备 4G 心跳超时→ 服务端置devIsOnline=0→ P2P 服务下发TPS_MSG_P2P_OFFLINE→LibImpl回调 →AutoResumePlay终止续播 →PreviewPlayerView显示"该设备不在线" - 关键分支:
dev4gOnline取值 -1 / 0 / 1 三分支;本次为 -1(未知),与devIsOnline=1不自洽,疑为 SDK 尚未完成 4G 状态探测即上报 - 修复方向锚点:
- 设备侧优先:核查 4G 流量卡的链路保活与心跳间隔,以及掉线后是否自动重连
- 客户端兜底:
dev4gOnline=-1时不应直接展示"该设备不在线",建议加二次确认/短暂重试再置离线(避免瞬时抖动被放大为用户可见故障) - 该问题与「异地组网设备日报」同域,可复用其设备清单与掉线扫描口径
7. 根因结论
- 置信度:🟡 中(Logan 直证设备側离线,但缺"掉线时刻"日志,且单用户样本)
- 一句话根因:设备更换 4G 流量卡后,P2P 长连接未能持续保活(心跳中断),服务端/P2P 下发
TPS_MSG_P2P_OFFLINE,App 侧表现为"过一会儿设备掉线";客户端链路(WebSocket、设备列表接口)全程正常,非 App 缺陷。 - 关键证据链:
device/list返回devIsOnline=1+lastHeartTime距今约 1 分钟(曾在线)→TPS_MSG_P2P_OFFLINE dev4gOnline=-1(已离线)→ 客户端WSManager-连接成功(排除客户端网络)。
8. 建议下一步
- 分配给:设备侧/固件负责人为主,Android 客户端为辅
- 优先处理项:① 取该用户设备 SN(
devId=17448863)核对服务端离线时间线;② 核查 4G 卡类型与 APN 兼容性、设备心跳/保活策略;③ 客户端对dev4gOnline=-1增加重试与温和提示 - 验证方法:同型号设备更换流量卡后连续运行 24h,观察
SiotDevConnectResult与device/list的devIsOnline是否出现"在线→离线→未恢复";回访 256103 / 256098
本期扫描全量(90 条)
| # | 关键词 | 反馈数 | 分类 | 处置 |
|---|---|---|---|---|
| 1 | 回放不了(回放页不常亮) | 1(256091) | 🟠 进雷达 | 详见问题 1,沿用 T-20260926-170258-576a |
| 2 | 换流量卡后过一会掉线 | 1(256103) | 🟠 进雷达 | 详见问题 2,新主题 |
| 3 | -102 网络类(含 -101) | 39 | 🟣 网络问题 | 已排除(普遍类),含俄语海外反馈 1 条 |
| 4 | 老是移动离开自动掉线、能撑好几天 | 1(256098) | 🟠 同域 | 见问题 2 延续样本 |
| 5 | 视频页面卡在 60% 加载 | 1(256096) | 🟡 加载类 | 8.4.1.6 HUAWEI,无 Logan,待复现 |
| 6 | 设备总是掉线/离线 | 3(256103/256098 及同域) | 🟠 同域 | 归入问题 2 |
| 7 | Harmony 掉线/离线/无意义 | 4(256101/256093 等) | 🟡 慢性已知 | 沿用 T-20260926-115214-fdf9 |
| 8 | 乱码/无意义内容(Tdj、。、4401、单符号) | 5 | 🟢 无效 | 已排除 |
| 9 | 重复提交(同一用户连发 2 条相同内容) | 2(256116/256115 同用户) | 🟢 无效 | 用户误操作,已排除 |
| 10 | 测试反馈(8.4.4.1 / iOS 17.6.1「4401」) | 1(256089) | 🟢 内部/测试 | iOS 8.4.4.1 非线上正式版本,已排除 |
| 11 | 心愿单/功能建议(永久保存、存储时长、有线观看等) | 35 | 🟤 心愿单建议 | 已排除(产品侧) |
排除说明:本窗口 -102/-101 网络类 39/90(43%),为普遍类网络问题,按规则不进雷达;其中含俄语海外反馈 1 条(土库曼斯坦)。
口径说明:本期为 17:00 正期,窗口取 09:00~17:00,与今日三次手动补跑(10:30 / 14:10 / 15:58)存在时间重叠;重叠时段内的同一反馈(如 256045 / 256074 / 256078 / 256084)已在对应期次分析,本期按"24h 内已分析 → 去重"处理,仅在问题 1 中作为延续样本引用,不重复计分。
数据源状态汇总
| 数据源 | 状态 | 说明 |
|---|---|---|
| 反馈平台 | ✅ 正常 | get_feedback 返回 total=90 / fetched=90 / complete=true(分页覆盖完整) |
| 反馈平台(认证) | ⚠️ 首次失败 | 首调 get_feedback 返回 Please login first;同窗口重试 1 次后恢复,按 SKILL 规则处理 |
| 心愿单 | ✅ 正常 | 未单独拉取(本窗口 35 条建议类已从反馈正文识别并归类) |
| Logan(Android 256103 / 256091) | ✅ 正常 | 22,683 / 27,155 行解析成功,均含决定性证据 |
| Logan(iOS 256089) | ⚠️ 证据弱 | 45,288 行解析成功,但日志以 SDK/HTTP 常规打印为主,4401 语义未定位 |
| Logan(Harmony 256101 / 256093 / 256084) | ⚠️ 缺失 | Harmony 反馈 loganFileDownloadUrl 为空,按规则跳过 |
| 神策 | ⏭️ 本窗口未查 | 与第216/218期同事件同窗口,避免重复消耗;问题 2 已标注待补证口径 |
| 友盟 | ⏭️ 未查 | 非崩溃/ANR 类,按规则跳过 |
| TAPD | ⏭️ 未查 | 功能性根因分析,按规则不查 TAPD |
| 代码仓 | ✅ 正常 | seetong-kmp + Seetong-App-Android 双仓定位成功,git 分支/提交校验通过 |
待补证
- 问题 1:
f98e6f3b是否可回溯补丁到 8.4.1.x;PlayBackPage显隐/销毁的super链在运行期是否完整(本期仅静态核对通过);退出回放页后FLAG_KEEP_SCREEN_ON是否被正确清除(防反向耗电) - 问题 2:缺"开始正常 → 掉线"完整时段的 Logan(该日志起于 15:37,反馈提交于 17:04);需服务端配合取
devId=17448863的离线时间线;dev4gOnline=-1与devIsOnline=1不自洽的语义需 SDK owner 确认 - 256096:视频页卡 60% 加载,无 Logan,下次若同用户再反馈优先取完整日志
- 256089:iOS 8.4.4.1「4401」语义未定位,且该版本非线上正式版本,暂不投入深挖
- 窗口重叠:今日存在 3 次手动补跑,09:00~17:00 正期与补跑窗口重叠;后续若补跑常态化,建议改为增量窗口(取上一期结束时刻为起点)以避免重复计分
下一期 = 第221期 = 2026-10-09-H09(明天早上 09:00;本期为 17:00 正期,窗口 09:00~17:00)